检查数组是否包含另一个数组的每个元素

时间:2019-05-14 18:14:49

标签: javascript arrays

例如,我要检查给定数组是否包含第二个数组的每个元素

['Laptop', 'PC', 'Ipad', 'Telephone', 'Smart Watch']
['Laptop,' 'PC', 'Smart Watch'] //true
['Laptop', 'Ipad', 'Banana'] //false

我尝试了以下代码:

var arr = [1, 2, 3];
var check = [3, 4, 5];

    var found = false;
      for (var i = 0; i < check.length; i++) {
          if (arr.indexOf(check[i]) > -1) {
             found = true;
             break;
          }
      }
    alert(found);  

它可以工作,但不是我想要的,即使在父数组中仅找到子元素中的一个,它也会发出警告。那我怎么实现我想要的呢?

3 个答案:

答案 0 :(得分:1)

您可以拿Set并用Array#every进行确认。

const check = (a, b) => b.every(Set.prototype.has, new Set(a));

var array1 = ['Laptop', 'PC', 'Ipad', 'Telephone', 'Smart Watch'],
    array2 = ['Laptop', 'PC', 'Smart Watch'],
    array3 = ['Laptop', 'Ipad', 'Banana'];

console.log(check(array1, array2)); //  true
console.log(check(array1, array3)); // false

ES5(IE安全)

function check(a, b) {
    var items = a.reduce(function (o, v) {
            o[v] = true;
            return o;
        }, Object.create(null));
    return b.every(function (v) { return items[v]; });
}

var array1 = ['Laptop', 'PC', 'Ipad', 'Telephone', 'Smart Watch'],
    array2 = ['Laptop', 'PC', 'Smart Watch'],
    array3 = ['Laptop', 'Ipad', 'Banana'];

console.log(check(array1, array2)); //  true
console.log(check(array1, array3)); // false

答案 1 :(得分:1)

[0.02, 0.03, 0.05, 0.06, 0.1, 0.15]

答案 2 :(得分:0)

您可以使用Array.every()来迭代第二个数组,并使用Array.includes()(对于旧的浏览器,请使用Array.indexOf())来检查第一个数组中是否存在该项。如果任何检查包括检查失败,那么every方法将返回false,如果所有检查都成功,则返回true

const contains = (arr1, arr2) =>
  arr2.every(v => arr1.includes(v)); // or arr2.every(v => arr1.indexOf(v) !== -1) for IE

console.log(contains(['Laptop', 'PC', 'Ipad', 'Telephone', 'Smart Watch'], ['Laptop', 'PC', 'Smart Watch'])); // true

console.log(contains(['Laptop', 'PC', 'Ipad', 'Telephone', 'Smart Watch'], ['Laptop', 'Ipad', 'Banana'])); // false

console.log(contains([1, 2, 3], [3, 4, 5])); // false