在 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 代码的有效方法?

Javascript/Coffeescript 在值相同时对多个键上的对象数组进行排序

如何使用 jQuery 信用卡验证器

webpack入门02