基于条件和对象值的对象Javascript数组计数

基于条件和对象值的对象Javascript数组计数,javascript,arrays,object,Javascript,Arrays,Object,我正在尝试通过child\u name计算对象已添加值===true是否javascript函数有用请指导我 这是主数组此数组在“对象有项目”下有对象,在“项目”下有另一个对象键和值仅当added===truebychild\u name [ { "id": 38, "items": { "Big Box": [ [ { "id": 1153, "parent_name": "Bi

我正在尝试通过child\u name计算对象已添加值===true是否javascript函数有用请指导我

这是主数组此数组在“对象有项目”下有对象,在“项目”下有另一个对象键和值仅当added===truebychild\u name

[
  {
    "id": 38,
    "items": {
      "Big Box": [
        [
          {
            "id": 1153,
            "parent_name": "Big Box",
            "child_name": "",
            "added": true
          }
        ],
        [
          {
            "id": 1153,
            "parent_name": "Big Box",
            "child_name": "",
            "added": false
          }
        ],
        [
          {
            "id": 1153,
            "parent_name": "Big Box",
            "child_name": "",
            "added": true
          }
        ]
      ]
    }
  },
  {
    "id": 37,
    "items": {
      "Drawers": [
        [
          {
            "id": 1108,
            "parent_name": "Drawers",
            "child_name": "Small "
          },
          {
            "id": 1109,
            "parent_name": "Drawers",
            "child_name": "Medium",
            "added": true
          },
          {
            "id": 1110,
            "parent_name": "Drawers",
            "child_name": "Large"
          }
        ]
      ],
      "Mirror": [
        [
          {
            "id": 1141,
            "parent_name": "Mirror",
            "child_name": "Large",
            "added": false
          },
          {
            "id": 1142,
            "parent_name": "Mirror",
            "child_name": "Small",
            "added": true
          },
          {
            "id": 1143,
            "parent_name": "Mirror",
            "child_name": "Medium",
            "added": false
          }
        ],
        [
          {
            "id": 1141,
            "parent_name": "Mirror",
            "child_name": "Large"
          },
          {
            "id": 1142,
            "parent_name": "Mirror",
            "child_name": "Small"
          },
          {
            "id": 1143,
            "parent_name": "Mirror",
            "child_name": "Medium",
            "added": true
          }
        ]
      ],
      "Stand": [
        [
          {
            "id": 1145,
            "parent_name": "Stand",
            "child_name": "",
            "added": true
          }
        ],
        [
          {
            "id": 1145,
            "parent_name": "Stand",
            "child_name": "",
            "added": true
          }
        ],
        [
          {
            "id": 1145,
            "parent_name": "Stand",
            "child_name": "",
            "added": true
          }
        ]
      ]
    }
  }
]
    [
      {
       "parent_name":"Big Box",
       "child_name":"",
       "count":2
      },
      {
       "parent_name":"Drawers",
       "child_name":"Medium",
       "count":1
      },
      {
       "parent_name":"Mirror",
       "child_name":"Small",
       "count":1
      },
      {
       "parent_name":"Mirror",
       "child_name":"Medium",
       "count":1
      },
      {
       "parent_name":"Stand",
       "child_name":"",
       "count":3
      }
    ]
输出应该通过child\u nameadded===true

[
  {
    "id": 38,
    "items": {
      "Big Box": [
        [
          {
            "id": 1153,
            "parent_name": "Big Box",
            "child_name": "",
            "added": true
          }
        ],
        [
          {
            "id": 1153,
            "parent_name": "Big Box",
            "child_name": "",
            "added": false
          }
        ],
        [
          {
            "id": 1153,
            "parent_name": "Big Box",
            "child_name": "",
            "added": true
          }
        ]
      ]
    }
  },
  {
    "id": 37,
    "items": {
      "Drawers": [
        [
          {
            "id": 1108,
            "parent_name": "Drawers",
            "child_name": "Small "
          },
          {
            "id": 1109,
            "parent_name": "Drawers",
            "child_name": "Medium",
            "added": true
          },
          {
            "id": 1110,
            "parent_name": "Drawers",
            "child_name": "Large"
          }
        ]
      ],
      "Mirror": [
        [
          {
            "id": 1141,
            "parent_name": "Mirror",
            "child_name": "Large",
            "added": false
          },
          {
            "id": 1142,
            "parent_name": "Mirror",
            "child_name": "Small",
            "added": true
          },
          {
            "id": 1143,
            "parent_name": "Mirror",
            "child_name": "Medium",
            "added": false
          }
        ],
        [
          {
            "id": 1141,
            "parent_name": "Mirror",
            "child_name": "Large"
          },
          {
            "id": 1142,
            "parent_name": "Mirror",
            "child_name": "Small"
          },
          {
            "id": 1143,
            "parent_name": "Mirror",
            "child_name": "Medium",
            "added": true
          }
        ]
      ],
      "Stand": [
        [
          {
            "id": 1145,
            "parent_name": "Stand",
            "child_name": "",
            "added": true
          }
        ],
        [
          {
            "id": 1145,
            "parent_name": "Stand",
            "child_name": "",
            "added": true
          }
        ],
        [
          {
            "id": 1145,
            "parent_name": "Stand",
            "child_name": "",
            "added": true
          }
        ]
      ]
    }
  }
]
    [
      {
       "parent_name":"Big Box",
       "child_name":"",
       "count":2
      },
      {
       "parent_name":"Drawers",
       "child_name":"Medium",
       "count":1
      },
      {
       "parent_name":"Mirror",
       "child_name":"Small",
       "count":1
      },
      {
       "parent_name":"Mirror",
       "child_name":"Medium",
       "count":1
      },
      {
       "parent_name":"Stand",
       "child_name":"",
       "count":3
      }
    ]

只需使用
reduce
函数和计数对
child\u name
parent\u name

const res = arr.reduce((agg, v) => { 
  for(const key in v.items) {
    if (!Array.isArray(v.items[key])) continue
    v.items[key].forEach(v => v.forEach(v => {
      if (typeof v !== 'object') return
      const value = {
        parent_name: v.parent_name,
        child_name: v.child_name,
        count: 1
      }
      const key = JSON.stringify(value)
      if (!agg[key]) 
        agg[key] = value 
      else
        agg[key].count++
    }))
  }
  return agg
}, {})

console.log(Object.values(res))

首先,请注意,
“Big Box”
等项是数组中的数组。您可能希望简单地将其设置为对象数组并执行以下操作:

var数据=[
{
“id”:38,
“项目”:{
“大盒子”:[
{
“id”:1153,
“家长姓名”:“大盒子”,
“儿童姓名”:“,
“添加”:正确
},
{
“id”:1153,
“家长姓名”:“大盒子”,
“儿童姓名”:“,
“已添加”:错误
},
{
“id”:1153,
“家长姓名”:“大盒子”,
“儿童姓名”:“,
“添加”:正确
}
]
}
}
]
var输出=[];
for(设i=0;ii.added==true);
var计数=x.length;
push({…x[0],…{count}})
}

console.log(输出)
您可以使用
reduce
执行此操作。以下是我的尝试:

var data=[{“id”:38,“items”:{“Big Box”:[[{“id”:1153,“parent_name”:“Big Box”,“child_name”:““added”:true}],{“id”:1153,“parent_name”:“Big Box”,“child_name”:“added”:false}],{“id”:1153,“parent_name”:“Big Box”,“child_name”:“,“added”:true}],{“id”:37,“items”:“{“Drawers”:[{“id”:1108,“家长姓名”:“抽屉”、“孩子姓名”:“小”}、{“id”:1109、“家长姓名”:“抽屉”、“孩子姓名”:“中”;“添加”:true}、{“id”:1110,“家长姓名”:“抽屉”、“孩子姓名”:“大”}],“镜像”:[[[{“id”:1141,“家长姓名”:“镜像”、“孩子姓名”:“大”;“添加”:false}、{“id”:1142,“家长姓名”:“镜像”、“孩子姓名”:”小的,添加的:真的,{id:1143,“父母的名字”:“镜像”,“孩子的名字”:“中的”,“添加的”:假的,{id:1141,“父母的名字”:“镜像”,“孩子的名字”:“大的”},{id:1142,“父母的名字”:“镜像”,“孩子的名字”:“小的”{id:1143,“父母的名字”:“镜像”,“孩子的名字”:“中的”,“添加的”:真的],“看台”:[{“id:1145,”家长姓名“:“看台”、“孩子姓名”:“,”添加“:”真“,”{“id”:1145,“家长姓名“:”看台“,”孩子姓名“:”,“,”添加“:”真“,”{“id”:1145,“家长姓名“:”看台“,”孩子姓名“:”,“添加“:”真“]}]
var result=Object.values(data.reduce((acc,{items})=>{
Object.values(items).forEach(values=>{
values.flat().filter(g=>g.added).forEach((t,i,self)=>{
key=`${t.parent_name}${t.child_name}`
acc[键]={};
acc[key]['parent_name']=t.parent_name;
acc[key]['child_name']=t.child_name;
acc[key]['count']=self.filter(c=>c.added&&c.child\u name==t.child\u name).length;
});
});
返回acc;
},{}));

console.log(result);
您试图解决此问题的方法是什么?请参阅了解如何提出好问题。