有条件从js数组中删除重复项

时间:2020-02-08 07:26:01

标签: javascript

我正在尝试删除数组中存在的重复ID。应该删除重复的ID,并保持其最大数量。例如-

我的对象包含以下属性:

[{
    "id": 2,
    "count": 10
}, {
    "id": 3,
    "count": 3
}, {
    "id": 4,
    "count": 6
}, {
    "id": "2",
    "count": 15
},{
    "id": "2",
    "count": 12
}]

说明: id:2是重复的,所以我需要删除id:2的计数分别为10和12。我需要保持id的最大值。

我没有找到任何类似的问题,因此无法解决。我是JS的初学者,因此赞赏代码中的注释。

4 个答案:

答案 0 :(得分:-1)

只需遍历每个值并评估它是否是累积集合中的最大值:

let unique_set = {}
let arr = [{
  "id": 2,
  "count": 10
}, {
  "id": 3,
  "count": 3
}, {
  "id": 4,
  "count": 6
}, {
  "id": "2",
  "count": 15
}, {
  "id": "2",
  "count": 12
}]

arr.forEach(obj => {
  if (obj.id in unique_set) {
    if (unique_set[obj.id].count <= obj.count)
      unique_set[obj.id] = obj;  // update
  } 
  else
    unique_set[obj.id] = obj;    // create
});

console.log(Object.values(unique_set))

答案 1 :(得分:-1)

const source = [{
    "id": 2,
    "count": 10
}, {
    "id": 3,
    "count": 3
}, {
    "id": 4,
    "count": 6
}, {
    "id": "2",
    "count": 15
},{
    "id": "2",
    "count": 12
}]
let result = []

source.forEach(sourceItem => {
    let found = false
    result.forEach(resultItem => {
        if (resultItem.id == sourceItem.id) {
            resultItem.count = Math.max(resultItem.count, sourceItem.count)
            found = true
        }
    })
    if (!found) {
        result.push(sourceItem)
    }
})

console.log(result)

答案 2 :(得分:-1)

无需遍历整个数组,您可以使用以下代码段获取结果:

https://jsfiddle.net/pramodsingh/py7hax4o/19/上进行检查

var obj = [{
    "id": 2,
    "count": 10
}, {
    "id": 3,
    "count": 3
}, {
    "id": 4,
    "count": 6
}, {
    "id": "2",
    "count": 15
},{
    "id": "2",
    "count": 12
}];

let max = Math.max.apply(Math,obj.map(function(o){ return o.id == 2
&& o.count;}));

let result = obj.filter(function(o){
	return !(o.id == 2 && o.count != max);
});
console.log(result);

答案 3 :(得分:-1)

使用reduceObject.values可以简化

const update = data =>
  Object.values(
    data.reduce(
      (acc, curr) => (
        (acc[curr.id] =
          curr.id in acc
            ? { ...acc[curr.id], count: Math.max(acc[curr.id].count, curr.count) }
            : { ...curr }),
        acc
      ),
      {}
    )
  );

const data = [
  {
    id: 2,
    count: 10
  },
  {
    id: 3,
    count: 3
  },
  {
    id: 4,
    count: 6
  },
  {
    id: "2",
    count: 15
  },
  {
    id: "2",
    count: 12
  }
];

console.log(update(data));

相关问题