首页 > 解决方案 > 过滤对象并获取所有具有相同值的项目 javascript

问题描述

我有一个像这样的对象

filters = [
  {gpo1: [{name:"a", selected: false}]
  },
  {gpo2: [{name:"b", selected: true}]
  },
  {gpo3: [{name:"a", selected: false}
           {name:"b", selected: false}
           {name:"c", selected: true}
           {name:"d", selected: false}
           {name:"e", selected: true}]
  },
  {gpo4: [{name:"f", selected: false}
           {name:"h", selected: false}
           {name:"r", selected: true}
           {name:"w", selected: false}
           {name:"x", selected: true}]
  },
]

我需要得到这个结果

selectedFilters = [
  {gpo2: [{name:"b", selected: true}]
  },
  {gpo3: [{name:"c", selected: true}
           {name:"e", selected: true}]
  },
  {gpo4: [{name:"r", selected: true}
           {name:"x", selected: true}]
  }
]

我已经用 lodash 寻找了一些替代品,但到目前为止我没有运气:(我希望有人能帮助我,谢谢

标签: javascriptjsonreactjslodash

解决方案


您需要使用过滤的项目重建对象。

const
    filters = [{ gpo1: [{ name: "a", selected: false }] }, { gpo2: [{ name: "b", selected: true }] }, { gpo3: [{ name: "a", selected: false }, { name: "b", selected: false }, { name: "c", selected: true }, { name: "d", selected: false }, { name: "e", selected: true }] }, { gpo4: [{ name: "f", selected: false }, { name: "h", selected: false }, { name: "r", selected: true }, { name: "w", selected: false }, { name: "x", selected: true }] }],
    result = filters.flatMap(o => {
        const entries = Object.entries(o).flatMap(([k, v]) => {
            v = v.filter(({ selected }) => selected);
            return v.length
                ? [[k, v]]
                : []
        });
        return entries.length
            ? Object.fromEntries(entries)
            : [];
    });
 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读