从对象数组中删除重复项

嗨,我正在尝试使用 id 从对象数组中删除重复项,但 id 为 null 那么该对象应包含那些 null id 并删除其他重复项


这是对象数组示例:


const arr = [

  {

    id: 6652,

    value: "erger"

  },

  {


    id: 6652,

    value: "sdfs"

  },

  {


    id: 6653,

    value: "sdgdfg"

  },

  {


    id: 6000,

    value: "trgd"

  },

  {


    id: 6667,

    value: "asdf"

  },

  {


    id: 6667,

    value: "fdg"

  },

  {


    id: 6668,

    value: "dfgr"

  },

  {


    id: null,

    value: "fg"

  },

  {


    id: null,

    value: "dfgdf"

  },


  {


    id: null,

    value: "fg"

  },

  {


    id: null,

    value: "dfgdf"

  }

];

下面是最终结果


array = [{


    id: 6652

    value: "sdfs"

  },

  {


    id: 6653

    value: "sdgdfg"

  },

  {


    id: 6000

    value: "trgd"

  },

  {


    id: 6667

    value: "fdg"

  },

  {


    id: 6668

    value: "dfgr"

  },

  {


    id: null

    value: "fg"

  },

  {


    id: null

    value: "dfgdf"

  },


  {


    id: null

    value: "fg"

  },

  {


    id: null

    value: "dfgdf"

  }


]


在上面的结果中,删除了 6652 和 6667,因为它们是重复的,但是保留了空 ID,因为我不想删除空 ID 并删除其他重复值。


下面是我正在尝试使用的逻辑,但如果 id 为 null,它就不起作用


array= array.filter((v,i,a)=>a.findIndex(t=>( v.id !== null && t.id === v.id ))===i)


天涯尽头无女友
浏览 81回答 3
3回答

MM们

const filterKeys = {};const filtered = arr.reduce((acc, item) => {  if (item.id === null || !(item.id in filterKeys)) {    filterKeys[item.id] = true;    acc.push(item);  }  return acc;}, []);在这种情况下,创建一个单独的对象来跟踪遇到的对象 ID filterKeys。因为array是一个数组,所以做一个 reduce 来遍历数组。如果id为 nuil 或未在 中找到filterKeys,则将该项目推入累加器并将其返回以用于下一次迭代。由于我们不关心为 null 的 id,因此它们没有效果,因此不会被过滤掉。

慕标琳琳

使用下面的代码,我用你的对象数组测试(工作):    arr.forEach(function (item) {        if (item.id == null) {            result.push(item);        }        else {            var index = result.findIndex(x => x.id == item.id);            if (index == -1)            {                result.push(item);            }                   }    });    console.log(result)

慕后森

你可以试试这个 -const array = [{ id: 6652, value: 'erger' },{ id: 6652, value: 'sdfs' },{ id: 6653, value: 'sdgdfg' },{ id: 6000, value: 'trgd' },{ id: 6667, value: 'asdf' },{ id: 6667, value: 'fdg' },{ id: 6668, value: 'dfgr' },{ id: null, value: 'fg' },{ id: null, value: 'dfgdf' },{ id: null, value: 'fg' },{ id: null, value: 'dfgdf' },];let index = 0;const result = Object.values(    array.reduce(        (acc, curr) =>            curr.id === null ? { ...acc, [index++]: curr } : { ...acc, [curr.id]: curr },        {}    ));console.log(result);.as-console-wrapper {min-height: 100%; top: 0}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript