根据两个属性从数组中删除对象

时间:2019-04-16 20:46:27

标签: javascript arrays ecmascript-5

我有一个数组,其中包含如下所示的自定义对象:

{
    field: fieldName,
    dataType: usuallyAString,
    title: titleForLocalization,
    environmentLabel: environmentName
}

对象上还有几个其他属性,但是我真正关心的只有fieldenvironmentLabel。我需要过滤出具有相同fieldenvironmentLabel但不关心其他任何属性的所有对象。该数组可以具有共享fieldenvironmentLabel的对象,但不能同时共享两者。

理想情况下,我想使用Array.filter,但尚未根据两个属性弄清楚该如何做。另外,我仅限于es5。

2 个答案:

答案 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)
相关问题