根据两个属性从数组中删除对象
Removing objects from array based on two properties
我有一个数组,其中包含如下所示的自定义对象:
{
field: fieldName,
dataType: usuallyAString,
title: titleForLocalization,
environmentLabel: environmentName
}
对象还有一些其他属性,但我真正关心的只有 field
和 environmentLabel
。我需要过滤掉任何具有相同 field
和 environmentLabel
但不关心任何其他属性的对象。该数组可以包含共享 field
或 environmentLabel
的对象,但不能同时包含两者。
理想情况下,我想使用 Array.filter
,但尚未根据两个属性弄清楚如何使用它。另外,我仅限于 es5。
创建另一个包含您要测试的所有属性组合的对象。使用 filter()
并测试该对是否已存在于对象中。如果没有,将属性添加到另一个对象和 return true
.
var seen = {};
newArray = array.filter(function(obj) {
if (seen[obj.field]) {
if (seen[obj.field].includes(obj.environmentLabel) {
return false;
} else {
seen[obj.field].push(obj.environmentLabel);
}
} else {
seen[obj.field] = [obj.environmentLabel];
}
return true;
});
const data = [{
field: 1,
dataType: "usuallyAString",
title: "titleForLocalization",
environmentLabel: 1
},
{
field: 1,
dataType: "usuallyAString",
title: "titleForLocalization",
environmentLabel: 1
},
{
field: 2,
dataType: "usuallyAString",
title: "titleForLocalization",
environmentLabel: 2
}]
var result = _.uniqWith(data, function(arrVal, othVal) {
return arrVal.field=== othVal.field && arrVal.environmentLabel=== othVal.environmentLabel;
});
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
如果你能使用 lodash,你可以这样做:
var result = _.uniqWith(data, function(arrVal, othVal) {
return arrVal.field=== othVal.field && arrVal.environmentLabel=== othVal.environmentLabel;
});
console.log(result)
我有一个数组,其中包含如下所示的自定义对象:
{
field: fieldName,
dataType: usuallyAString,
title: titleForLocalization,
environmentLabel: environmentName
}
对象还有一些其他属性,但我真正关心的只有 field
和 environmentLabel
。我需要过滤掉任何具有相同 field
和 environmentLabel
但不关心任何其他属性的对象。该数组可以包含共享 field
或 environmentLabel
的对象,但不能同时包含两者。
理想情况下,我想使用 Array.filter
,但尚未根据两个属性弄清楚如何使用它。另外,我仅限于 es5。
创建另一个包含您要测试的所有属性组合的对象。使用 filter()
并测试该对是否已存在于对象中。如果没有,将属性添加到另一个对象和 return true
.
var seen = {};
newArray = array.filter(function(obj) {
if (seen[obj.field]) {
if (seen[obj.field].includes(obj.environmentLabel) {
return false;
} else {
seen[obj.field].push(obj.environmentLabel);
}
} else {
seen[obj.field] = [obj.environmentLabel];
}
return true;
});
const data = [{
field: 1,
dataType: "usuallyAString",
title: "titleForLocalization",
environmentLabel: 1
},
{
field: 1,
dataType: "usuallyAString",
title: "titleForLocalization",
environmentLabel: 1
},
{
field: 2,
dataType: "usuallyAString",
title: "titleForLocalization",
environmentLabel: 2
}]
var result = _.uniqWith(data, function(arrVal, othVal) {
return arrVal.field=== othVal.field && arrVal.environmentLabel=== othVal.environmentLabel;
});
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
如果你能使用 lodash,你可以这样做:
var result = _.uniqWith(data, function(arrVal, othVal) {
return arrVal.field=== othVal.field && arrVal.environmentLabel=== othVal.environmentLabel;
});
console.log(result)