为了账号安全,请及时绑定邮箱和手机立即绑定

计算嵌套对象数

计算嵌套对象数

鸿蒙传说 2023-02-24 16:46:17
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 方法来做到这一点。谢谢
查看完整描述

3 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

使用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]



查看完整回答
反对 回复 2023-02-24
?
潇湘沐

TA贡献1816条经验 获得超6个赞

将有多种方法解决此问题,但如果您只对出现“colour2”:“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);


查看完整回答
反对 回复 2023-02-24
?
烙印99

TA贡献1829条经验 获得超13个赞

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


let count = [];

json.forEach((order, index) => {

  count[index] = [];

  order.items.forEach((item) => {

    if (item.colour2 === "red") {

      count[index].push(item.colour2);

    }

  });

});

console.log(count);


查看完整回答
反对 回复 2023-02-24
  • 3 回答
  • 0 关注
  • 63 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信