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

时间:2018-12-04 05:38:41

标签: javascript arrays

目标数组[1,2,3]

array1 = [1,2,3]; //return true
array2 = [1,2,3,4]; //return true
array3 = [1,2] //return false

我不知道如何实现此目标,或者可能需要在其中使用自定义登录。 我已经使用了一些内容,但包含的内容对我不起作用。

7 个答案:

答案 0 :(得分:7)

every()方法测试数组中的所有元素是否通过提供的函数实现的测试。它返回一个布尔值。有理由认为,如果您在原始数组上调用every()并为其提供一个函数,该函数检查原始数组中的每个元素是否包含在另一个数组中,那么您会得到答案。因此:

const ar1 = ['a', 'b'];
const ar2 = ['c', 'd', 'a', 'z', 'g', 'b'];

if(ar1.every(r => ar2.includes(r))){
  console.log('Found all of', ar1, 'in', ar2);
}else{
  console.log('Did not find all of', ar1, 'in', ar2);
}

答案 1 :(得分:4)

您可以使用.every().includes()方法:

let array1 = [1,2,3],
    array2 = [1,2,3,4],
    array3 = [1,2];

let checker = (arr, target) => target.every(v => arr.includes(v));

console.log(checker(array2, array1));
console.log(checker(array3, array1));

答案 2 :(得分:2)

您可以尝试使用Array.prototype.every()

  

every()方法测试数组中的所有元素是否通过提供的函数实现的测试。

Array.prototype.includes()

  

includes()方法确定数组是否包含某个元素,并在适当时返回true或false。

var mainArr = [1,2,3];
function isTrue(arr, arr2){
  return arr.every(i => arr2.includes(i));
}
console.log(isTrue(mainArr, [1,2,3]));
console.log(isTrue(mainArr, [1,2,3,4]));
console.log(isTrue(mainArr, [1,2]));

答案 3 :(得分:0)

如果您使用的是ES5,则只需执行此操作即可。

targetArray =[1,2,3]; 
array1 = [1,2,3]; //return true
array2 = [1,2,3,4]; //return true
array3 = [1,2] //return false

console.log(targetArray.every(function(val) { return array1.indexOf(val) >= 0; })); //true
 console.log(targetArray.every(function(val) { return array2.indexOf(val) >= 0; })); // true
 console.log(targetArray.every(function(val) { return array3.indexOf(val) >= 0; }));// false

答案 4 :(得分:0)

我使用了纯Javascript。

function checkElementsinArray(fixedArray,inputArray)
{
    var fixedArraylen = fixedArray.length;
    var inputArraylen = inputArray.length;
    if(fixedArraylen<=inputArraylen)
    {
        for(var i=0;i<fixedArraylen;i++)
        {
            if(!(inputArray.indexOf(fixedArray[i])>=0))
            {
                return false;
            }
        }
    }
    else
    {
        return false;
    }
    return true;
}

console.log(checkElementsinArray([1,2,3], [1,2,3]));
console.log(checkElementsinArray([1,2,3], [1,2,3,4]));
console.log(checkElementsinArray([1,2,3], [1,2]));

答案 5 :(得分:0)

我有一个类似的问题,但不是两个简单的数组。我想检查数组 groceryList 中的所有项目是否都包含在由水果对象组成的 basket 数组中。

它检查每个 groceryList 项目的天气值是否在我的 fruitType 数组中的某个水果对象属性 basket 中。

也许这有助于像我一样寻找解决方案的人。

const groceryList = [ "apple", "cherry"]
const basket = [{fruitType: "apple", amount: 3}, {fruitType: "cherry", amount: 20}, {fruitType: "blueberry", amount: 50}]

console.log(groceryList, basket, groceryList.every(v => basket.some(w => w.fruitType === v)));

答案 6 :(得分:0)

下面是包含逻辑:

function contains($superset, $subset) {
    foreach ($subset as $item) if (!in_array($item, $superset)) return true;
    return false;
}