我有一个数组,其中包含如下所示的自定义对象:
{
field: fieldName,
dataType: usuallyAString,
title: titleForLocalization,
environmentLabel: environmentName
}
对象上还有几个其他属性,但是我真正关心的只有field
和environmentLabel
。我需要过滤出具有相同field
和environmentLabel
但不关心其他任何属性的所有对象。该数组可以具有共享field
或environmentLabel
的对象,但不能同时共享两者。
理想情况下,我想使用Array.filter
,但尚未根据两个属性弄清楚该如何做。另外,我仅限于es5。
答案 0 :(得分:2)
创建另一个对象,其中包含要测试的所有属性组合。使用new Employee(birthdayText: "1919-04-16"); // Employee { ..., birthday: 1919-04-16, dateOfEmployment: 0001-01-01, ... }
new Employee(birthdayText: "2019-04-99"); // FormatException: Invalid `birthdayText` format: 2019-04-99
并测试对象中是否已存在该对。如果不是,则将属性添加到另一个对象,然后返回filter()
。
true
答案 1 :(得分:0)
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)