【问题标题】:Remove duplicate values from an array of objects in javascript [duplicate]从javascript中的对象数组中删除重复值[重复]
【发布时间】:2018-01-08 10:43:29
【问题描述】:

我有一个这样的对象数组:

arr = [
    {label: Alex, value: Ninja},
    {label: Bill, value: Op},
    {label: Cill, value: iopop}
]

这个数组是在我的 react 组件被渲染时组成的。 i 用户 Array.prototype.unshift 在我的数组顶部添加所需的元素。 所以我写arr.unshift({label: All, value: All})。当我的组件首次渲染时,我的数组已按我的意愿成功创建。但是当我重新渲染它时,它会向我显示值 {label: All, value: All} 的数组重复。更具体地说,它显示如下:

arr = [
    {label: All, value: All},
    {label: All, value: All},
    {label: Alex, value: Ninja},
    {label: Bill, value: Op},
    {label: Cill, value: iopop}
]

我该如何解决这个问题?我尝试了此处特定主题中描述的方法,但没有奏效

【问题讨论】:

  • 我读过这个它是相似的但不完全重复。我的情况不同
  • 是的,当然,它们总是......请添加您尝试过的代码。
  • 字符串或标识符应该是什么?
  • 是的,它们是字符串,只是想显示我所面临的情况
  • 您的情况有何不同?

标签: javascript arrays duplicates


【解决方案1】:

您可以使用array#reducearray#some

const arr = [
    {label: 'All', value: 'All'},
    {label: 'All', value: 'All'},
    {label: 'Alex', value: 'Ninja'},
    {label: 'Bill', value: 'Op'},
    {label: 'Cill', value: 'iopop'}
]

var result = arr.reduce((unique, o) => {
    if(!unique.some(obj => obj.label === o.label && obj.value === o.value)) {
      unique.push(o);
    }
    return unique;
},[]);
console.log(result);

【讨论】:

  • 想给 1k upvote,但你必须在 1 内管理 :) 。非常感谢这个完美的答案
【解决方案2】:

ES6+ 的一站式解决方案

labelvalue 独有

arr.filter((v,i,a)=>a.findIndex(t=>(t.label === v.label && t.value===v.value))===i)

对象的所有属性都是唯一的:

arr.filter((v,i,a)=>a.findIndex(t=>(JSON.stringify(t) === JSON.stringify(v)))===i)

【讨论】:

    【解决方案3】:

    这段代码对我有用,

    const addresses = [...]; // Some array I got from async call
    
    const uniqueAddresses = Array.from(new Set(addresses.map(a => a.id)))
     .map(id => {
       return addresses.find(a => a.id === id)
     })
    

    【讨论】:

      【解决方案4】:
      const things = {
        thing: [
          { id: '12345', name: 'First name' },
          { id: '12345', name: 'Second name' },
          { id: '34536', name: 'Third name' }, 
        ],
      };
      
      const RemoveDuplicates = (array, key) => {
        return array.reduce((arr, item) => {
          const removed = arr.filter(i => i[key] !== item[key]);
          return [...removed, item];
        }, []);
      };
      
      console.log(RemoveDuplicates(things.thing, 'id'));
      

      【讨论】:

        【解决方案5】:
        function removeDuplicates(array, key) {
           let lookup = {};
           array.forEach(element => {
             lookup[element[key]] = element
           });
           return Object.keys(lookup).map(key => lookup[key]);
        };
        
        removeDuplicates(array,'objectKey');
        

        【讨论】:

          【解决方案6】:

          ES1 兼容:

          const a = [
              {label: 'All', value: 'All'},
              {label: 'All', value: 'All'},
              {label: 'Alex', value: 'Ninja'},
              {label: 'Alex', value: 'Ninja'},
              {label: 'Alex', value: 'Ninja'}
          ]
          
          for (let i = 0; i < a.length; ++i)
              for (let j = 0; j < a.length; ++j)
                  if (i !== j && a[i].label === a[j].label && a[i].value === a[j].value)
                      a.splice(j, 1);            
          console.log(a);

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-06-25
            • 2021-08-26
            • 2018-06-19
            • 2020-10-25
            • 1970-01-01
            • 2017-04-10
            相关资源
            最近更新 更多