首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用lodash检查数组是否有重复值

使用lodash检查数组是否有重复值
EN

Stack Overflow用户
提问于 2015-02-12 01:51:06
回答 6查看 32.2K关注 0票数 29

你们都认为最好的(最好的可以解释为最具可读性或最好的性能,由你选择)方法是什么,为了检查一个数组中是否有重复值,使用lodash实用程序编写一个函数。

我想输入['foo', 'foo', 'bar']并让函数返回true。并输入['foo', 'bar', 'baz']并让函数返回false

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-02-12 01:56:16

你可以试试这段代码:

代码语言:javascript
复制
function hasDuplicates(a) {
  return _.uniq(a).length !== a.length; 
}

var a = [1,2,1,3,4,5];
var b = [1,2,3,4,5,6];

document.write(hasDuplicates(a), ',',hasDuplicates(b));
代码语言:javascript
复制
<script src="http://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.1.0/lodash.min.js"></script>

票数 61
EN

Stack Overflow用户

发布于 2015-02-12 02:22:42

您可以检查数组中是否存在_.some元素,当在数组中查找时,该元素不返回自己的位置。换句话说,至少有一个元素在数组中的前面有匹配。

代码语言:javascript
复制
function hasDuplicates(array) {
    return _.some(array, function(elt, index) { 
        return array.indexOf(elt) !== index; 
    });
}

也许这比_.uniq解决方案更快,因为它将立即识别第一个重复的元素,而不必计算整个唯一化的数组。

或者,根据您的编码风格和对可读性的要求,如果您希望使用ES6箭头函数以实现简洁性:

代码语言:javascript
复制
var earlierMatch  = (elt, index, array) => array.indexOf(elt) !== index;
var hasDuplicates = array => _.some(array, earlierMatch);
票数 8
EN

Stack Overflow用户

发布于 2019-05-27 06:41:55

从ES6开始,你可以简单地使用Set,这样就变成了:

代码语言:javascript
复制
let hasDuplicates = arr => new Set(arr).size != arr.length

console.log(hasDuplicates([5,3,2,1,2,1,2,1]))
console.log(hasDuplicates([1,2,3,4,5]))

这在某种程度上否定了在这种特殊情况下的lodash的使用。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28461014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档