簡體   English   中英

檢查數組是否包含另一個數組的所有元素

[英]Check if array contains all elements of another array

我想要一個 function 當且僅當給定數組包含給定“目標”數組的所有元素時才返回true 如下。

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

我怎樣才能完成上述結果?

您可以組合.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

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

您可以嘗試使用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]));

我使用純 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]));

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

我有一個類似的問題,但不是兩個簡單的數組。 我想檢查數組groceryList中的所有項目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)));

下面執行包含邏輯:

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

也許它會幫助你,我有這個方法來驗證對象是否具有特定屬性

 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://stackoverflow.com/questions/53606337/check-if-array-contains-all-elements-of-another-array#

reduce 也可以在這里使用(但它有 O = (N * M) 難度):

const result = target.reduce((acc, el) => {
    return acc && array.includes(el)
}, true);

為了以更有效的方式解決這個問題(O = N + M):

const myMap = new Map();

array.forEach(element => myMap.set(element);

const result = target.reduce((acc, el) => {
   return acc && myMap.has(el)
}, true);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM