如果属性值匹配,则从数组中删除对象

时间:2018-06-08 18:07:28

标签: javascript arrays angular

我的对象数组如下:

{
  "brandid": id,
  "brand": string,
  "id": id,
  "categoryId": id,
  "category": string,
  "factory": string,
  "series": string,
  "status": 0,
  "subStatus": 1
}

如果series属性值与数组中其他对象中的另一个系列属性值匹配,则需要从该数组中删除该对象。

目前我试图将它们推送到一个重复的数组:

      const seriesResCopy = seriesRes;
      const dupArray = []
      for (const thing of seriesResCopy) {
        for (const item of seriesRes) {
          if (thing.series === item.series) {
            dupArray.push(item);
          }
        }
      }

但这不起作用。从示例我看来我的问题是我没有确定的重复值列表要查找。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

您可以使用一系列系列来过滤重复项:

const exists = new Set();
seriesRes = seriesRes.filter(({series}) => !exists.has(series) && exists.add(series));

这使用:Array.prototype.filter,对象解构和一些逻辑技巧。

通过改变数组可以做到同样的事情:

const exists = new Set();
for(const [index, {series}] of seriesRes.entries()) {
  if(!exists.has(series) {
    exists.add(series);
  } else {
    seriesRes.splice(index, 1);
  }
}

答案 1 :(得分:0)

要从数组中过滤重复项并保留第一个实例:

let seriesWithoutDuplicates = seriesRes.filter((s, i, self) => {
    return self.findIndex(z => z.series === s.series) === i;
});