簡體   English   中英

Javascript 減少 function 在多個子數組中的使用

[英]Javascript reduce function use in multiple child array

如果 common === true 在多個子數組下,我正在嘗試計算值計數,但我沒有成功如何使用 java 腳本減少 function 以獲得總計 4

總和應該是 4 因為只有 4 object 有共同 === true

const obj = {
  "A": [
    [
      {
        "count": "1.00",
        "common": false
      },{
        "count": "1.00",
        "common": true
      }
    ],
    [
      {
        "count": "1.00",
        "common": false
      },
      {
        "count": "1.00",
        "common": true
      }
    ]
  ],
  "B": [
    [
      {
        "count": "1.00",
        "common": false
      },{
        "count": "1.00",
        "common": true
      }
    ],
    [
      {
        "count": "1.00",
        "common": false
      },
      {
        "count": "1.00",
        "common": true
      }
    ]
  ]
};

let total = Object.values(obj).reduce((acc, value) => acc + value.reduce((a,b) => a+b.reduce((c,d) => c + (d.common) ? parseInt(d.count) : 0,0),0), 0); 

這是另一種方式

 const obj = { "A": [ [ { "count": "1.00", "common": false },{ "count": "1.00", "common": true } ], [ { "count": "1.00", "common": false }, { "count": "1.00", "common": true } ] ], "B": [ [ { "count": "1.00", "common": false },{ "count": "1.00", "common": true } ], [ { "count": "1.00", "common": false }, { "count": "1.00", "common": true } ] ] }; let total = 0; Object.values(obj).forEach(c => c.forEach(arr => total += arr.filter(o => o.common).length)); console.log("Total: " + total);

您已將 arrays 嵌套為 object 的值,您需要兩個內部循環來獲得求和所需的屬性

 const obj = { A: [[{ count: "1.00", common: false }, { count: "1.00", common: true }], [{ count: "1.00", common: false }, { count: "1.00", common: true }]], B: [[{ count: "1.00", common: false }, { count: "1.00", common: true }], [{ count: "1.00", common: false }, { count: "1.00", common: true }]] }, total = Object.values(obj).reduce((r, outer) => { outer.forEach(inner => inner.forEach(({ common, count }) => r += common? +count: 0) ); return r; }, 0); console.log(total); // 4

另一種方法是使用concat展平數組,然后應用reduce

 const obj = { "A": [ [{"count": "1.00", "common": false}, {"count": "1.00", "common": true}], [{"count": "1.00", "common": false}, {"count": "1.00", "common": true}] ], "B": [ [{"count": "1.00", "common": false}, {"count": "1.00", "common": true}], [{"count": "1.00", "common": false}, {"count": "1.00", "common": true}] ] }; const sum = [].concat(...([].concat(...Object.values(obj)))).reduce(( acc, cur ) => acc + (cur.common? +cur.count: 0), 0) console.log(`Total count = ${sum}`);

暫無
暫無

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

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