使用嵌套对象

时间:2018-05-08 14:49:13

标签: javascript arrays reduce

我认为这是一个愚蠢的问题和简单但我无法在谷歌和其他资源中找到任何结果

我有这样的对象数组

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

换句话说,我有一个数组,我的数组包含一些数组,每个内部数组都包含一些对象

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

现在我想得到两件事

  1. 所有产品的数量?
  2. 所有产品的总和?
  3. *(每个对象=一个产品)

4 个答案:

答案 0 :(得分:4)

spreading将单个数组展平为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);




答案 1 :(得分:2)

您可以使用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)

答案 2 :(得分:2)

您可以使用spread来展平数组:

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);

答案 3 :(得分:2)

ES6

您还可以使用reduce数组方法来获取所需的结果

  

reduce可用于迭代数组,将当前元素值添加到前一个元素值的总和。

<强>样本

&#13;
&#13;
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);
&#13;
.as-console-wrapper {max-height: 100% !important;top: 0;}
&#13;
&#13;
&#13;