работа с вложенным объектом - PullRequest
0 голосов
/ 08 мая 2018

Я думаю, что это глупый и простой вопрос, но я не могу найти никакого результата в Google и других ресурсах

У меня есть массив таких объектов

 const myArr = [
     [{
         id: 1,
         price: 200,
     }, {
         id: 2,
         price: 900,
     }, {
         id: 3,
         price: 100,
     }],
     [{
         id: 5,
         price: 100,
     }]
 ];

Другими словами, у меня есть массив, и мой массив содержит некоторый массив, и каждый из внутренних массивов содержит некоторый объект внутри них

 arr [ [ {},{},{} ] ,   [ {} ]    ]

Теперь я хочу получить две вещи

  1. количество всех продуктов?
  2. сумма всех товаров?

* (каждый объект = один продукт)

Ответы [ 4 ]

0 голосов
/ 08 мая 2018

ES6

Вы также можете использовать reduce метод массива, чтобы получить требуемый результат

уменьшение можно использовать для итерации массива, добавляя текущее значение элемента к сумме предыдущих значений элемента.

DEMO

const myArr = [[{id: 1,price: 200,}, {id: 2,price: 900,}, {id: 3,price: 100,}],[{id: 5,price: 100,}]];
  
let result = myArr.reduce((r,v)=>{
  r.count += v.length;
  r.sum += v.reduce((total,{price}) => total+price,0);
  return r;
},{count:0,sum:0}) 

console.log(result);
.as-console-wrapper {max-height: 100% !important;top: 0;}
0 голосов
/ 08 мая 2018

Вы можете использовать concat, чтобы обернуть все объекты в одно array.

Применить свойство length, чтобы узнать количество объектов в массиве, а затем метод reduce дляполучить сумму.

const myArr = [ [ { id:1, price:200, }, { id:2, price:900, }, { id:3, price:100, } ], [ { id:5, price:100, } ] ];

arr = myArr.reduce((acc, arr) => acc.concat(arr), []);
sum = arr.reduce((acc, item) => acc + item.price, 0);
console.log('count ' + arr.length);
console.log('sum ' + sum)
0 голосов
/ 08 мая 2018

Вы можете использовать спред для выравнивания массива:

var myArr = [
 [
   { 
     id:1,
     price:200,
   },

   { 
     id:2,
     price:900,
   },

   { 
     id:3,
     price:100,
   }
 ],

[
  { 
     id:5,
     price:100,
   }
]
];

var arr = [].concat(...myArr);
console.log('Length: ', arr.length);
var sum = arr.reduce((m, o) => m + o.price, 0);
console.log('Sum: ', sum);
0 голосов
/ 08 мая 2018

Сведение к одному массиву путем распространения в Array.concat().

Используйте Array.reduce(), чтобы получить sum.

count - длина уплощенного массива.

const myArr = [[{"id":1,"price":200},{"id":2,"price":900},{"id":3,"price":100}],[{"id":5,"price":100}]];

const flattened = [].concat(...myArr);
const count = flattened.length;
const sum = flattened.reduce((s, o) => s + o.price, 0);

console.log('count', count);
console.log('sum', sum);
...