我已经搜寻了很多帖子,并且在这个问题上研究了太长时间了。要点是,如果存在重复的对象ID,我想过滤一个数组,然后返回值较低或“ val”的对象,否则返回原始元素。
从...开始:
**编辑输入以澄清
let input = [
{"id": 1, "val": 3},
{"id": 2, "val": 1},
{"id": 3, "val": 4},
{"id": 1, "val": 0}
]
function removeDuplicates(array, propertyName) {
// where propertyName is "id"
}
该函数的结果应为:
[
{"id": 1, "val": 0},
{"id": 2, "val": 1},
{"id": 3, "val": 4}
]
最佳答案
解决此类问题的一种非常常见的方法是创建一个使用公共属性作为键并将完整对象用作值的临时对象。
一旦遍历数据数组一次并构建对象,那么将值放入结果数组的简单过程
let input = [
{"id": 1, "val": 0},
{"id": 2, "val": 0},
{"id": 3, "val": 0},
{"id": 1, "val": 1}
]
let tmp = {}
input.forEach(o=> {
tmp[o.id] = tmp[o.id] || o;
// assign lower value if applicable
if( o.val < tmp[o.id].val){
tmp[o.id].val = o.val;
}
});
let res = Object.values(tmp);
console.log(res);