ES6 数组去重基础问题

如下list数据,保存在this.state.tableModels里.使用如下方法:
未能输出结果,问题出在哪里?

  let newTableModel = [...new Set(this.state.tableModels)]
  console.log(newTableModel)  //打印空值

list数据如下:

[
  {
    "aliasName": "666666",
    "id": "1ab7a8fb-bce7-4579-8822-e7d67f72025b",
    "schema": "public",
    "tableName": "car_cross_info1"
  },
  {
    "aliasName": "666666",
    "id": "1ab7a8fb-bce7-4579-8822-e7d67f72025b",
    "schema": "public",
    "tableName": "car_cross_info1"
  }
]

=====================================

问题产生原因:
tableFormData是list数组,但每条数据中tableAliasName值是相同的,只要取出就可以.如下使用了map,导致输出了多条数据,最后需要去重.

如果这里有办法只拿一次,就没有后面的去重了.

this.state.tableFormData.map(item => {

aliasName: item.tableAliasName,

})

问题截图:
Screenshot from 2020-02-29 09-46-07.png

阅读 3.8k
2 个回答

set适用于数字数组,而这里解决方法可以参考下面的。

let a = [
  {
    aliasName: "666666",
    id: "1ab7a8fb-bce7-4579-8822-e7d67f72025b",
    schema: "public",
    tableName: "car_cross_info1"
  },
  {
    aliasName: "666666",
    id: "1ab7a8fb-bce7-4579-8822-e7d67f72025b",
    schema: "public",
    tableName: "car_cross_info1"
  }
];

let b = a.reduce((acc, cur) => {
  !acc.some(v => v.id === cur.id) && acc.push(cur);
  return acc;
}, []);

对象数组去重没那么容易,用 lodash 库的 uniqWith 最方便:

_.uniqWith(objectArray, _.isEqual);

会去掉完全相同的重复对象

推荐问题