你们都认为最好的(最好的可以解释为最具可读性或最好的性能,由你选择)方法是什么,为了检查一个数组中是否有重复值,使用lodash实用程序编写一个函数。
我想输入['foo', 'foo', 'bar']
并让函数返回true
。并输入['foo', 'bar', 'baz']
并让函数返回false
。
发布于 2015-02-12 01:56:16
你可以试试这段代码:
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));
<script src="http://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.1.0/lodash.min.js"></script>
发布于 2015-02-12 02:22:42
您可以检查数组中是否存在_.some
元素,当在数组中查找时,该元素不返回自己的位置。换句话说,至少有一个元素在数组中的前面有匹配。
function hasDuplicates(array) {
return _.some(array, function(elt, index) {
return array.indexOf(elt) !== index;
});
}
也许这比_.uniq
解决方案更快,因为它将立即识别第一个重复的元素,而不必计算整个唯一化的数组。
或者,根据您的编码风格和对可读性的要求,如果您希望使用ES6箭头函数以实现简洁性:
var earlierMatch = (elt, index, array) => array.indexOf(elt) !== index;
var hasDuplicates = array => _.some(array, earlierMatch);
发布于 2019-05-27 06:41:55
从ES6开始,你可以简单地使用Set,这样就变成了:
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的使用。
https://stackoverflow.com/questions/28461014
复制相似问题