簡體   English   中英

Javascript 基於條件和 object 值的 object 的數組計數

[英]Javascript Array count of object based on condition and by object value

我正在嘗試計算 object 的增值 === true by child_name女巫 javascript function 有用請指導我嗎?

This is main Array this array has object under object has items and under items has another object key and value how to count object only if added === true by child_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
          }
        ]
      ]
    }
  }
]

output 應該喜歡這個計數 object by child_name添加 === 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來做到這一點。 這是我的嘗試:

 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, "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 } ] ] } }] 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[key]= {}; acc[key]['parent_name'] = t.parent_name; acc[key]['child_name'] = t.child_name; acc[key]['count'] = self.filter(c=>c.added && c.child_name==t.child_name).length; }); }); return acc; },{})); console.log(result);

只需使用reduce function 遍歷所有元素並計算對child_nameparent_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 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 } ] } } ] var output = []; for(let i =0; i< data.length; i++) for(var key in data[i].items){ var x = data[0].items[key].filter(i=>i.added === true); var count = x.length; output.push({...x[0], ...{count}}) } console.log(output)

暫無
暫無

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

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