2016-05-13 56 views
0

我想从我当前的数组中删除重复的数组值。我想将新的列表(没有重复的列表)存储到一个新变量中。删除重复的数组值,然后将它们存储[反应]

var names = ["Daniel","Lucas","Gwen","Henry","Jasper","Lucas","Daniel"]; 

const uniqueNames = []; 
const namesArr = names.filter((val, id) => { 
    names.indexOf(val) == id; // this just returns true 
}); 

如何删除重复的名称并将非重复项放入新变量中?

即:uniqueNames将返回...

["Daniel","Lucas","Gwen","Henry","Jasper"] 

(我使用的反应JSX)谢谢!

+0

有人upvoted我原来的答复,我删除,因为我没有完全理解这个问题(无论如何它可能是错误的)。它的肉是你在过滤器里错过了一个“回报”! – Scott

+0

@ScottKaye你为什么认为你的解决方案是错误的..? –

+0

@WildWidow我不确定他是否希望数组包含已删除的元素,或者删除这些元素后的数组。 – Scott

回答

4

你可以做到这一点的一个班轮

const uniqueNames = Array.from(new Set(names)); 

//将返回的唯一项目的集合

请注意,@Wild Widow指出了你的一个错误 - 你没有使用return语句。 (当我们忘记时,它很糟糕,但它发生了!)

我会补充说,如果考虑过滤器的第三个参数(a,b,c),可以简化代码,并且回调可以更加可重用。 c)函数 - 其中c是正在遍历的数组。随着中说,你可以重构你的代码如下:

const uniqueNames = names.filter((val, id, array) => { 
    return array.indexOf(val) == id; 
}); 

而且,你甚至不会需要一个return语句,如果你使用ES6

const uniqueNames = names.filter((val,id,array) => array.indexOf(val) == id); 
1

你忘了使用return声明中filter通话

const namesArr = duplicatesArray.filter(function(elem, pos) { 
    return duplicatesArray.indexOf(elem) == pos; 
}); 
相关问题