繁体   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