从javascript中的对象数组中删除重复值

use*_*203 1 javascript arrays duplicates

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

arr = [
    {label: Alex, value: Ninja},
    {label: Bill, value: Op},
    {label: Cill, value: iopop}
]
Run Code Online (Sandbox Code Playgroud)

这个数组是在渲染我的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}
]
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?我在这里尝试了特定主题中描述的方法,但它没有用

Has*_*mam 25

你可以使用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);
Run Code Online (Sandbox Code Playgroud)


chi*_*ens 16

ES6+ 的一站式解决方案

独特的labelvalue

arr.filter((v,i,a)=>a.findIndex(t=>(t.label === v.label && t.value===v.value))===i)
Run Code Online (Sandbox Code Playgroud)

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

arr.filter((v,i,a)=>a.findIndex(t=>(JSON.stringify(t) === JSON.stringify(v)))===i)
Run Code Online (Sandbox Code Playgroud)

  • v,i,a == 值、索引、数组 (2认同)

小智 5

这段代码对我有用,

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)
 })
Run Code Online (Sandbox Code Playgroud)