nac*_*son 20 javascript lodash
您认为使用lodash实用程序编写函数以便检查数组是否存在重复值时,您认为最好(最好可以解释为最可读或最高效,您的选择)的方法.
我想输入['foo', 'foo', 'bar']
并返回函数true
.并输入['foo', 'bar', 'baz']
并具有返回功能false
.
age*_*hun 43
你可以试试这段代码:
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));
Run Code Online (Sandbox Code Playgroud)
<script src="http://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.1.0/lodash.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
小智 8
您可以检查_.some
数组中的元素在数组中查找时没有返回自己的位置.换句话说,至少有一个元素在数组中具有较早的匹配.
function hasDuplicates(array) {
return _.some(array, function(elt, index) {
return array.indexOf(elt) !== index;
});
}
Run Code Online (Sandbox Code Playgroud)
也许这比_.uniq
解决方案更快,因为它将立即识别第一个重复元素,而无需计算整个唯一的数组.
或者,根据您的编码风格和对可读性的要求,以及为简洁起见,您希望使用ES6箭头功能:
var earlierMatch = (elt, index, array) => array.indexOf(elt) !== index;
var hasDuplicates = array => _.some(array, earlierMatch);
Run Code Online (Sandbox Code Playgroud)
从 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]))
Run Code Online (Sandbox Code Playgroud)
在这种特殊情况下,这在某种程度上否定了 lodash 的使用。
归档时间: |
|
查看次数: |
21803 次 |
最近记录: |