JavaScript:删除共享相同属性值的对象的重复项

标签 javascript arrays angularjs object key-value

我有一个对象数组,我想根据特定的key:value 对来 trim 它们。我想创建一个数组,其中每个特定 key:value 对仅包含一个对象。将重复项中的哪个对象复制到新数组并不一定重要。

例如,我想根据 arrayWithDuplicatesprice 属性进行 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/

相关文章:

javascript - 使用 RegExp 删除数组项?

php - 将内容保存到 mysql 数据库时出现撇号 "'“问题

javascript - 获取最后一个表达式的返回值

javascript - NodeJS SSL 验证不正确

c++ - 段错误 - 已使用新的和删除的。在运行时正在创建大量数组(无界数组)

python - 如何在二维数组中使用 numpy.searchsorted 进行矢量化

php - MySQL数据库搜索返回多维数组?

javascript - 使用 $http 缓存时如何重新触发 ng-if/ng-show 动画

javascript - Angularjs 指令不起作用 "Unexpected token"

javascript - 如何从页面 Controller 访问指令中的dom元素