如何使用 Javascript 中的 filter 方法获取唯一的数组

9

我有一个数组:

var a = [2,3,4,5,5,4]

我想从给定的数组中获取不重复的数组,例如:
b = [2,3,4,5]

我已经尝试过。
a.filter(function(d){return b.indexOf(d)>-1})

而且我不想使用for循环。


5
https://dev59.com/iWox5IYBdhLWcg3waziQ - Sharath Bangera
这里有多个示例- http://www.jstips.co/en/deduplicate-an-array/,使用更新的ES语法和未来实现(使用Array Sets)。 - ioneyed
使用 Lodash 库(https://lodash.com/docs/#uniq) - Pratap
3个回答

14

你可以简单地在JavaScript中完成它,使用filter方法的第二个索引参数:

var a = [2,3,4,5,5,4];
a.filter(function(value, index){ return a.indexOf(value) == index });

如果您能解释一下这个代码块 "function(d,i){return a.indexOf(d)==i}",我会很高兴。 - Mohammad Sadiqur Rahman
3
参数中的 i 是用于索引的,也就是说当您查找倒数第二个5时,索引将为4,但 indexOf 将为3,因此它们不匹配,因此将被过滤掉。 - Ashutosh Jha
谢谢。你已经给出了一个简单、巧妙而又很棒的解决方案。 - Mohammad Sadiqur Rahman

6

这不是一个与Angular相关的问题。根据您使用的库,可以通过几种方式解决。

如果您使用jquery:

var uniqeElements = $.unique([2,3,4,5,5,4]);

输出将会是:
[2,3,4,5]

如果您正在使用underscore:

var uniqeElements = _.uniq([2,3,4,5,5,4]);

同样的输出结果。

而且是纯JS代码:

var unique = [2,3,4,5,5,4].filter(function(elem, index, self) {
    return index == self.indexOf(elem);
})

0
var b = a.filter( function( item, index, inputArray ) {
       return inputArray.indexOf(item) == index;
});

2
请在您的代码中添加一些解释。 - Yury Fedorov
请参考Yaser Adel Mehraban的解决方案。 - Janaka Dissanayake

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接