首页 > 解决方案 > 从数组中删除重复项,但使用 JS 忽略一个参数

问题描述

如何获取唯一数组但忽略数组中的参数之一?我想忽略name并比较其他人,比方说......

let inventories = [
  {name: 'Polo Shirt', size: 'XL', price: 19.90, color: 'black'},
  {name: 'Polo Shirt (Stripe)', size: 'XL', price: 19.90, color: 'black'},
  {name: 'Polo Shirt (Printed)', size: 'XL', price: 19.90, color: 'black'},
  {name: 'Short Sleeve Polo Shirt', size: 'L', price: 14.90, color: 'blue'},
  {name: 'Sleeve Polo Shirt', size: 'L', price: 20.90, color: 'black'},
  {name: 'Long Sleeve Polo Shirt', size: 'L', price: 14.90, color: 'blue'},
  {name: 'Long Sleeve Polo Shirt', size: 'L', price: 14.90, color: 'blue'},
  {name: 'Long Sleeve Polo Shirt', size: 'L', price: 14.90, color: 'blue'},
];

我想要的结果:

[
  {name: 'Polo Shirt (Printed)', size: 'XL', price: 19.90, color: 'black'},
  {name: 'Sleeve Polo Shirt', size: 'L', price: 20.90, color: 'black'},
  {name: 'Long Sleeve Polo Shirt', size: 'L', price: 14.90, color: 'blue'},
];

我知道我们可以通过以下方式获得唯一数组:

inventories = inventories
  .map(JSON.stringify)
  .reverse()
  .filter(function(item, index, inventories) {
    return inventories.indexOf(item, index + 1) === -1;

但我不知道如何告诉他们忽略name参数......

标签: javascriptarrays

解决方案


我认为,这是最简单的答案。您可以创建一个哈希表并根据除name. 请参阅以下代码:

let inventories = [
  {name: 'Polo Shirt', size: 'XL', price: 19.90, color: 'black'},
  {name: 'Polo Shirt (Stripe)', size: 'XL', price: 19.90, color: 'black'},
  {name: 'Polo Shirt (Printed)', size: 'XL', price: 19.90, color: 'black'},
  {name: 'Short Sleeve Polo Shirt', size: 'L', price: 14.90, color: 'blue'},
  {name: 'Sleeve Polo Shirt', size: 'L', price: 20.90, color: 'black'},
  {name: 'Long Sleeve Polo Shirt', size: 'L', price: 14.90, color: 'blue'},
  {name: 'Long Sleeve Polo Shirt', size: 'L', price: 14.90, color: 'blue'},
  {name: 'Long Sleeve Polo Shirt', size: 'L', price: 14.90, color: 'blue'}
]

const hash = {}

inventories.forEach(function(elem) {
  var selected =  Object.assign({}, elem);
  delete selected.name;
  const key = Object.values(selected).join('-');
  hash[key] = elem;
});
const result = Object.values(hash);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读