根据多个键的重复值从对象数组中删除元素 [英] Removing elements from an array of objects based on duplicate values of multiple keys
问题描述
我有一个这样的对象数组-
I have an array of objects like this -
var arr = [
{ type_id: "3", full_empty:"true", quantity:1},
{ type_id: "3", full_empty:"true", quantity:1},
{ type_id: "9", full_empty:"true", quantity:4},
{ type_id: "9", full_empty:"false", quantity:4},
{ type_id: "9", full_empty:"true", quantity:4},
{ type_id: "9", full_empty:"true", quantity:4},
{ type_id: "9", full_empty:"true", quantity:4}
];
我要删除具有相同 type_id 和 full_empty 值的重复项.结果应该像这样-
I want to remove the duplicates having same type_id and full_empty values. The result should look like this -
var arr = [
{ type_id: "3", full_empty:"true", quantity:1},
{ type_id: "9", full_empty:"true", quantity:4},
{ type_id: "9", full_empty:"false", quantity:4},
];
我已经搜索并找到了一些解决方案,但是其中一些解决方案是用于删除重复的键或仅基于一个键的重复值来删除重复的键.一些必需的外部库.也有一些我不明白的解决方案.有没有简单的方法可以在纯JavaScript中做到这一点?
I have searched and found some solution, but some of them are for removing duplicate keys or for removing duplicates based on duplicate value of only one key. Some required external libraries. Also there are some solutions which i can't understand. Is there any easy way to do this in plain JavaScript ?
Edit for better understand - I have read this question . Accepted answer on that question is for finding duplication for only one key. In my case, I have to find the duplication for multiple keys.
推荐答案
您可以通过使用 Array.reduce() ,将您的输入数组缩小为不同元素的数组,如下所示
You can use pure functions by using Array.some() and Array.reduce() to reduce your input array to array of distinct elements as shown below
var arr = [
{ type_id: "3", full_empty:"true", quantity:1},
{ type_id: "3", full_empty:"true", quantity:1},
{ type_id: "9", full_empty:"true", quantity:4},
{ type_id: "9", full_empty:"false", quantity:4},
{ type_id: "9", full_empty:"true", quantity:4},
{ type_id: "9", full_empty:"true", quantity:4},
{ type_id: "9", full_empty:"true", quantity:4}
];
var a = arr.reduce(function (accumulator, current) {
if (checkIfAlreadyExist(current)) {
return accumulator
} else {
return accumulator.concat([current]);
}
function checkIfAlreadyExist(currentVal) {
return accumulator.some(function(item){
return (item.type_id === currentVal.type_id &&
item.full_empty === currentVal.full_empty);
});
}
}, []);
console.log(a);
简洁的ES6语法
更简洁的reduce
可以使用 ES6 箭头功能和散布运算符编写,如下所示:
A more concise reduce
can be written using ES6 arrow functions and spread operator as below:
var arr = [
{ type_id: "3", full_empty:"true", quantity:1},
{ type_id: "3", full_empty:"true", quantity:1},
{ type_id: "9", full_empty:"true", quantity:4},
{ type_id: "9", full_empty:"false", quantity:4},
{ type_id: "9", full_empty:"true", quantity:4},
{ type_id: "9", full_empty:"true", quantity:4},
{ type_id: "9", full_empty:"true", quantity:4}
];
var a = arr.reduce((accumulator, current) => {
if (checkIfAlreadyExist(current)) {
return accumulator;
} else {
return [...accumulator, current];
}
function checkIfAlreadyExist(currentVal) {
return accumulator.some((item) => {
return (item.type_id === currentVal.type_id &&
item.full_empty === currentVal.full_empty);
});
}
}, []);
console.log(a);
这篇关于根据多个键的重复值从对象数组中删除元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!