在 JavaScript/CoffeeScript 中确定一个数组是不是包含另一个数组的内容
Posted
技术标签:
【中文标题】在 JavaScript/CoffeeScript 中确定一个数组是不是包含另一个数组的内容【英文标题】:Determining whether one array contains the contents of another array in JavaScript/CoffeeScript在 JavaScript/CoffeeScript 中确定一个数组是否包含另一个数组的内容 【发布时间】:2013-03-09 00:53:54 【问题描述】:在 javascript 中,如何测试一个数组是否包含另一个数组的元素?
arr1 = [1, 2, 3, 4, 5]
[8, 1, 10, 2, 3, 4, 5, 9].function_name(arr1) # => true
【问题讨论】:
另一个问题的副本如何?另一个问题还有一个条件:如果一个元素的值在arr2中重复,它需要在arr1中出现相同的次数。 这能回答你的问题吗? Check if array contains all elements of another array 【参考方案1】:没有 set 函数可以做到这一点,但您可以简单地做一个临时数组交集并检查长度。
[8, 1, 10, 2, 3, 4, 5, 9].filter(function (elem)
return arr1.indexOf(elem) > -1;
).length == arr1.length
更有效的方法是使用.every
,它会在虚假情况下短路。
arr1.every(elem => arr2.indexOf(elem) > -1);
【讨论】:
这当然需要最少的代码,但它会进行完整的枚举,而不是在意识到元素不在 arr1 中时停止。所以它的性能可能不如@valentinas 的解决方案。 有替代品吗? @bygrace if array.some elem => arr2.indexOf(elem) === -1 return false 怎么样?【参考方案2】:你可以使用array.indexOf():
伪代码:
function arrayContainsAnotherArray(needle, haystack)
for(var i = 0; i < needle.length; i++)
if(haystack.indexOf(needle[i]) === -1)
return false;
return true;
【讨论】:
【参考方案3】:function arr(arr1,arr2)
for(var i=0;i<arr1.length;i++)
if($.inArray(arr1[i],arr2) ==-1)
//here it returns that arr1 value does not contain the arr2
else
// here it returns that arr1 value contains in arr2
【讨论】:
【参考方案4】:使用includes
的ES6解决方案:
[1].every(elem => [1,2,3].includes(elem));
与上面 Explosion Pills 的解决方案非常相似,只是更具可读性(并且可以说是慢了一点点)。
【讨论】:
【参考方案5】:如果我得到您的确切信息,我遇到了同样的情况,我的情况是在一次旅行中检查访问过的地方,每次旅行都有自己的观点,我们有所有工作区域地点的数据,这里的代码可能对您有所帮助。
https://stackblitz.com/edit/trips-calculator?file=index.js
【讨论】:
以上是关于在 JavaScript/CoffeeScript 中确定一个数组是不是包含另一个数组的内容的主要内容,如果未能解决你的问题,请参考以下文章
Javascript/Coffeescript/jQuery 中是不是有与 Ruby 的发送等效的内容?
确定一个数组是否包含JavaScript / CoffeeScript中另一个数组的内容[重复]
管理 Rails 5 的 javascript/coffeescript 代码的有效方法?