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

Posted

技术标签:

【中文标题】检查数组是不是包含另一个数组的所有元素【英文标题】:Check if array contains all elements of another array检查数组是否包含另一个数组的所有元素 【发布时间】:2022-01-18 23:37:21 【问题描述】:

当且仅当给定数组包含给定“目标”数组的所有元素时,我想要一个返回 true 的函数。如下。

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

我怎样才能完成上述结果?

【问题讨论】:

Determining whether one array contains the contents of another array in javascript/CoffeeScript的可能重复 另见How to Check If an Array Contains All Elements of Another Array in JavaScript? 【参考方案1】:

您可以结合使用.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));  // true
console.log(checker(array3, array1));  // false

【讨论】:

【参考方案2】:

你可以试试Array.prototype.every():

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

Array.prototype.includes():

includes() 方法判断数组是否包含某个元素,根据情况返回真或假。

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】:

如果您使用的是 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】:

我使用纯 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】:

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);

【讨论】:

如果您在答案中添加一些解释会更好【参考方案6】:

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

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

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

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)));

【讨论】:

【参考方案7】:

下面是包含逻辑:

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

【讨论】:

【参考方案8】:

也许它会帮助你,我有这个方法来验证一个对象是否有一个特定的属性

function existFields(data: object, fields: string[]): boolean 

  return !fields

    .map((field) => Object.keys(data).includes(field))

    .includes(Boolean(0));



const data="test":"a","test2":"b";
const fields=["test"]

console.log(existFields(data,fields))//True
console.log(existFields(data,["test","test3"]))//False
https://***.com/questions/53606337/check-if-array-contains-all-elements-of-another-array#

【讨论】:

以上是关于检查数组是不是包含另一个数组的所有元素的主要内容,如果未能解决你的问题,请参考以下文章

要检查数组是不是仅包含另一个数组中的元素,VB.NET

如何检查一个数组是不是包含另一个数组的任何元素

检查一个数组是不是包含 JavaScript 中另一个数组的任何元素

检查一个数组是不是包含 JavaScript 中另一个数组的任何元素

检查数组是不是包含另一个数组及其在 DART/Flutter 中的位置

如何检查包含另一个对象数组的对象数组是不是具有属性