我有一个对象数组,我想根据特定的key:value
对来 trim 它们。我想创建一个数组,其中每个特定 key:value
对仅包含一个对象。将重复项中的哪个对象复制到新数组并不一定重要。
例如,我想根据 arrayWithDuplicates
的 price
属性进行 trim ,创建一个仅包含每个值之一的新数组:
var arrayWithDuplicates = [
{"color":"red",
"size": "small",
"custom": {
"inStock": true,
"price": 10
}
},
{"color":"green",
"size": "small",
"custom": {
"inStock": true,
"price": 30
}
},
{"color":"blue",
"size": "medium",
"custom": {
"inStock": true,
"price": 30
}
},
{"color":"red",
"size": "large",
"custom": {
"inStock": true,
"price": 20
}
}
];
会变成:
var trimmedArray = [
{"color":"red",
"size": "small",
"custom": {
"inStock": true,
"price": 10
}
},
{"color":"green",
"size": "small",
"custom": {
"inStock": true,
"price": 30
}
},
{"color":"red",
"size": "large",
"custom": {
"inStock": true,
"price": 20
}
}
];
是否有 JavaScript 或 Angular 函数可以循环执行此操作?
EDIT: The property to filter on is nested within another property.
最佳答案
此函数通过返回一个新值来从数组中删除重复值。
function removeDuplicatesBy(keyFn, array) {
var mySet = new Set();
return array.filter(function(x) {
var key = keyFn(x), isNew = !mySet.has(key);
if (isNew) mySet.add(key);
return isNew;
});
}
var values = [{color: "red"}, {color: "blue"}, {color: "red", number: 2}];
var withoutDuplicates = removeDuplicatesBy(x => x.color, values);
console.log(withoutDuplicates); // [{"color": "red"}, {"color": "blue"}]
所以你可以像这样使用它
var arr = removeDuplicatesBy(x => x.custom.price, yourArrayWithDuplicates);
关于JavaScript:删除共享相同属性值的对象的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32238602/