我认为这是一个愚蠢的问题和简单但我无法在谷歌和其他资源中找到任何结果
我有这样的对象数组
const myArr = [
[{
id: 1,
price: 200,
}, {
id: 2,
price: 900,
}, {
id: 3,
price: 100,
}],
[{
id: 5,
price: 100,
}]
];
换句话说,我有一个数组,我的数组包含一些数组,每个内部数组都包含一些对象
arr [ [ {},{},{} ] , [ {} ] ]
现在我想得到两件事
*(每个对象=一个产品)
答案 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)
您还可以使用reduce
数组方法来获取所需的结果
reduce可用于迭代数组,将当前元素值添加到前一个元素值的总和。
<强>样本强>
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;