簡體   English   中英

如何對嵌套數組求和

[英]How to sum nested array

我有一個這樣的數組

var dataSheet = [
    [{price: 200}, {price: 200}, {price: 200}],
    [{price: 200}, {price: 200}],
    [{price: 200}],
]

我想總結所有的價格和這樣的結果

result = [[600], [400], [200]]

任何幫助將不勝感激,謝謝

您可以使用.map().forEach() function。

 var dataSheet = [ [{price: 200}, {price: 200}, {price: 200}], [{price: 200}, {price: 200}], [{price: 200}], ] const res = dataSheet.map(arr => { let sum = 0; arr.forEach(obj => sum += obj.price); return [sum]; }); console.log(res);

嵌套和平面 arrays 的原理相同:只需使用reduce來獲取數組中值的總和。 在您的情況下,您只需將此機制應用於dataSheet中的每個嵌套數組並接收新的值數組。 方法map旨在根據源數組中的值精確創建新數組。

所以正確的答案是使用mapreduce的組合。

 var dataSheet = [ [{price: 200}, {price: 200}, {price: 200}], [{price: 200}, {price: 200}], [{price: 200}], ] var result = dataSheet.map(data => data.reduce((acc, obj) => acc += obj.price,0)); console.log(result); // [600, 400, 200]

如果你真的需要有類似[[600],[400],[200]]的結果(嵌入 arrays 而不僅僅是值,你只需要將返回值包裝在[]中,如下所示:

 var dataSheet = [ [{price: 200}, {price: 200}, {price: 200}], [{price: 200}, {price: 200}], [{price: 200}], ] var result = dataSheet.map(data => [data.reduce((acc, obj) => acc += obj.price,0)]); console.log(result); // [[600], [400], [200]]

我猜map + reduce是你要找的:)

const res = dataSheet.map(el => el.reduce((acc, curr) => acc + curr.price, 0));

或者flatMap如果您需要 [600, 400, 200] 的結果:

const res = dataSheet.flatMap(el => el.reduce((acc, curr) => acc + curr.price, 0));

使用mapreduce和解構。

 var dataSheet = [ [{ price: 200 }, { price: 200 }, { price: 200 }], [{ price: 200 }, { price: 200 }], [{ price: 200 }], ]; const result = dataSheet.map((arr) => Object.values( arr.reduce(({ price: acc }, { price }) => ({ price: acc + price })) ) ); console.log(result)

 var dataSheet = [ [{price: 200}, {price: 200}, {price: 200}], [{price: 200}, {price: 200}], [{price: 200}], ]; var res = dataSheet.reduce((result, row) => result.concat([[row.reduce((sum, element) => sum + element.price, 0)]]), []); console.log(res);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM