我有一个像这样的对象的数组:
arr = [
{name: 'Igor', ....},
{name: 'Anton', .... },
{name: 'Igor', .... },
{name: 'Peter', .... },
{name: 'Igor', .... }
]
我需要从atrray获取所有名称,没有重复。我试过看起来像这样
var names = [];
arr.forEach((item) => {
if (!names.some(val => val === item)) {
names.push(item.name);
}
}
但是我得到了包括重复的所有名字
upd:我正在使用React
如果我只是推送names.push(item.name);
数组一切正常,我会得到数组[Igor, Anton, Peter]
。但!如果我推这样的项目:
chat.forEach((item) => {
if (names.indexOf(item.name) === -1)
names.push(<UserItem name={item.name} />);
});
我得到了5个元素的数组:伊戈尔,安东,伊戈尔,彼得,伊戈尔。 这不是重复的静止!
答案 0 :(得分:3)
关闭,你只需要检查数组是否为dupes
var names = [];
arr.forEach(function(obj) {
if (names.indexOf(obj.name) === -1) names.push(obj.name);
});
var template = names.map(function(name) {
return <UserItem name={name} />;
});
或
arr.forEach( v => names.indexOf(v.name) === -1 ? names.push(v.name) : null);
答案 1 :(得分:1)
您可以使用names.indexOf,如果找不到则返回-1,这样您就可以添加它。
arr.forEach(function(item) {
if (names.indexOf(item) === -1) {
names.push(item);
}
});