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#reduce和array#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+ 的一站式解决方案
独特的label和value
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)
小智 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)