【问题标题】:How to filter an array of objects based on multiple unique values? [duplicate]如何根据多个唯一值过滤对象数组? [复制]
【发布时间】:2019-06-18 11:01:10
【问题描述】:

我有一个看起来像这样的数据集:

const data = [{
    "First Name" : "John"
    "Last Name": "Doe"
    "Cars Sold": 2
  },
  {
    "First Name" : "John"
    "Last Name": "Doe"
    "Cars Sold": 1
  },
  {
    "First Name" : "Jane"
    "Last Name": "Doe"
    "Cars Sold": 3
  }];

我将如何过滤它以获取对象中所有人的列表?即输出应该是对象中唯一人员的列表(名字和姓氏的组合)。

谢谢

【问题讨论】:

  • 什么不起作用?
  • 感谢您回答尼娜。您所指的重复问题并不能完全解决我的问题。这些解决方案仅过滤 1 个参数,而我想过滤两个参数的组合:名字和姓氏。数据集只包含两个人,但如果我根据姓氏进行过滤,它只会返回 1 个名字。

标签: javascript arrays filter


【解决方案1】:

独特的人,名字和姓氏之间用空格隔开:

const data = [{"First Name":"John", "Last Name":"Doe", "Cars Sold":2},{"First Name":"John", "Last Name":"Doe", "Cars Sold":1},{"First Name":"Jane", "Last Name":"Doe", "Cars Sold":3}];
const res = [...new Set(data.map(e => e["First Name"] + " " + e["Last Name"]))];
console.log(res);

ES5 语法:

var data = [{"First Name":"John", "Last Name":"Doe", "Cars Sold":2},{"First Name":"John", "Last Name":"Doe", "Cars Sold":1},{"First Name":"Jane", "Last Name":"Doe", "Cars Sold":3}];
var res = data.map(function(e) {
  return e["First Name"] + " " + e["Last Name"];
}).filter(function(e, i, a) {
  return a.indexOf(e) == i;
});
console.log(res);

【讨论】:

    【解决方案2】:

    const data = [{
        "First Name" : "John",
        "Last Name": "Doe",
        "Cars Sold": 2
      },
      {
        "First Name" : "John",
        "Last Name": "Doe",
        "Cars Sold": 1
      },
      {
        "First Name" : "Jane",
        "Last Name": "Doe",
        "Cars Sold": 3
      }];
    
    const list = data.reduce((acc, cur) => acc.includes(`${cur['First Name']} ${cur['Last Name']}`) ? acc : acc.concat([`${cur['First Name']} ${cur['Last Name']}`]), []);
    
    console.log(list);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 2019-09-30
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      • 2017-09-08
      相关资源
      最近更新 更多