Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用lodash检查数组是否具有重复值_Javascript_Lodash - Fatal编程技术网

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

Javascript 使用lodash检查数组是否具有重复值,javascript,lodash,Javascript,Lodash,为了检查数组中是否存在重复值,您认为使用lodash实用程序编写函数的最佳方法是什么(最好的方法可以解释为最可读或最性能,由您选择) 我想输入['foo','foo','bar']并让函数返回true。然后输入['foo'、'bar'、'baz']并让函数返回false您可以尝试以下代码: 函数有重复项(a){ 返回uq(a).length!==a.length; } 变量a=[1,2,1,3,4,5]; var b=[1,2,3,4,5,6]; (a),,,,和(b)重复 好吧,总是有。洛达

为了检查数组中是否存在重复值,您认为使用lodash实用程序编写函数的最佳方法是什么(最好的方法可以解释为最可读或最性能,由您选择)

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

您可以尝试以下代码:

函数有重复项(a){
返回uq(a).length!==a.length;
}
变量a=[1,2,1,3,4,5];
var b=[1,2,3,4,5,6];
(a),,,,和(b)重复

好吧,总是有。洛达斯的功能。该函数实际上返回一个只包含唯一值的新数组,因此检查数组的长度是否已更改将使您自己返回“真”或“假”值。

我不知道lodash,但我提交:

_.any(_.countBy(['foo', 'foo', 'bar']), function(x){ return x > 1; });

到目前为止提出的所有解决方案的问题是,整个输入数组都需要处理才能得到答案,即使答案从数组的前两个元素中是显而易见的。

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

function hasDuplicates(array) {
    return _.some(array, function(elt, index) { 
        return array.indexOf(elt) !== index; 
    });
}
这可能比
\uq.uniq
解决方案快,因为它将立即识别第一个重复的元素,而无需计算整个唯一数组

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

var earlierMatch  = (elt, index, array) => array.indexOf(elt) !== index;
var hasDuplicates = array => _.some(array, earlierMatch);

从ES6开始,您可以简单地使用它,使其成为:

let hasdeplicates=arr=>new Set(arr).size!=棱长
日志(hasDuplicates([5,3,2,1,2,1,2,1]))

console.log(hasDuplicates([1,2,3,4,5]))
无需使用
lodash
,请使用以下代码:

function getDuplicates(array, key) {
  return array.filter(e1=>{
    if(array.filter(e2=>{
      return e1[key] === e2[key];
    }).length > 1) {
      return e1;
    }
  })
}

==
相对的
===
有什么特殊原因吗?在这种特殊情况下,这并不重要。我改为
==
。非常感谢。当然可以,但为了挑剔,OP要求使用
hasdeplicates
函数,而不是
hasnodupplicates
。改为
hasdeplicates()
简短准确。大量使用
索引
!!吹毛求疵:
indexOf
(O(n))在
some
(O(n))->O(n2)中。是的,这是一个检查重复项的O(n^2)算法。我不认为这是吹毛求疵,更多的是一个重大缺陷。从lodash的第4版开始,
中的任何一个都不赞成,而赞成使用