【问题标题】:react I want to remove duplicate values in the array [duplicate]反应我想删除数组中的重复值[重复]
【发布时间】:2020-12-08 07:30:32
【问题描述】:

如果数组中有相同的id,我想删除它。
在下文中,id3 和 id4 是重复的。我想删除重复项并创建一个像①这样的数组。
如下图我用了indexof,但是无法去掉数组中的重复值。
如果有人知道,我想请教教授

// users
     {id:1, name: 'aaaaa', type: "text"}
     {id:2, name: 'bbbbb', type: "text"}
     {id:3, name: 'ccccc', type: "text"}
     {id:3, name: 'dddddd', type: "text"}
     {id:4, name: 'eeeeee', type: "text"}
     {id:4, name: 'ffffff', type: "text"}
//①Array with duplicates removed
 {id:1, name: 'aaaaa', type: "text"}
 {id:2, name: 'bbbbb', type: "text"}
 {id:3, name: 'dddddd', type: "text"}
 {id:4, name: 'ffffff', type: "text"}
  const List = (users:Users[]) => {
    const arrayUsers = users.filter((x, i, self) => {
      return self.indexOf(x) === i;
    });

【问题讨论】:

    标签: javascript reactjs typescript


    【解决方案1】:

    您可以使用Array.prototype.reduce() 方法删除重复项。遍历数组并按id分组。

    const users = [
      { id: 1, name: 'aaaaa', type: 'text' },
      { id: 2, name: 'bbbbb', type: 'text' },
      { id: 3, name: 'ccccc', type: 'text' },
      { id: 3, name: 'dddddd', type: 'text' },
      { id: 4, name: 'eeeeee', type: 'text' },
      { id: 4, name: 'ffffff', type: 'text' },
    ];
    
    const ret = Object.values(
      users.reduce((prev, c) => {
        const p = prev;
        const key = c.id;
        p[key] = c;
        return p;
      }, {})
    );
    console.log(ret);

    【讨论】:

    • const ret 的类型为 unknown[]。我怎样才能使它成为用户 [] 类型?
    • 为什么要创建const p = prev 变量?它什么也没做
    • @adiga,对声明为函数参数的变量赋值可能会产生误导并导致令人困惑的行为。所以,我养成了这样的习惯,并且总是这样编写代码。
    • @satodesu 将类型添加到 ret const ret:Users[]