繁体   English   中英

计算嵌套对象数

[英]Count nested object numbers

 const json = [{ "order": 1111, "items": [ { "colour1": "red", "colour2": "yellow", }, { "colour1": "red", "colour2": "red", }, { "colour1": "red", "colour2": "red", } ] }, { "order": 2222, "items": [ { "colour1": "black", "colour2": "blue", "colour3": "orange" }, { "colour1": "white", "colour2": "red", "colour3": "green", } ] }] Object.entries(json).forEach(([i, v]) => { let count = []; Object.entries(v.items).forEach(([j, k]) => { if (k.colour2.includes('red')) { count.push(k.colour2) } }); console.log(count, count.length) //length = [2, 1] });

我觉得我写的这段代码不是过滤和计算长度的有效方法。 目标是过滤某个值并得到结果。 寻找替代方法和适当的 es6 方法来做到这一点。 谢谢

使用reduce()

 const json = [{"order":1111,"items":[{"colour1":"red","colour2":"yellow"},{"colour1":"red","colour2":"red"},{"colour1":"red","colour2":"red"}]},{"order":2222,"items":[{"colour1":"black","colour2":"blue","colour3":"orange"},{"colour1":"white","colour2":"red","colour3":"green"}]}] const res = json.reduce((acc, order) => { let red = order.items.filter(color => color.colour2 === 'red') return red.length ? [...acc, red.length] : acc }, []) console.log(res)

注意:要获得过滤结果而不是计数返回[...acc, red]

有多种方法可以解决此问题,但如果您只对“color2”:“red”的出现感兴趣。 你也可以使用这样的东西。

 let json = [{"order":1111,"items":[{"colour1":"red","colour2":"yellow"},{"colour1":"red","colour2":"red"},{"colour1":"red","colour2":"red"}]},{"order":2222,"items":[{"colour1":"black","colour2":"blue","colour3":"orange"},{"colour1":"white","colour2":"red","colour3":"green"}]}] let count=[]; for(let i of json){ count.push(JSON.stringify(i).match(/"colour2":"red"/g).length) } console.log(count);

也许不是这里的最佳效率,但它是可以理解的代码:

let count = [];
json.forEach((order, index) => {
  count[index] = [];
  order.items.forEach((item) => {
    if (item.colour2 === "red") {
      count[index].push(item.colour2);
    }
  });
});
console.log(count);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM