簡體   English   中英

檢查數組是否包含JavaScript中另一個數組的一部分

[英]Checking if an array contains part of another array in javascript

我會直截了當。 我有兩個數組:

fruits = ["Banana", "Apple"];
fruitsSpecified = ["Big Banana", "Banana Small", "Black Apple", "Big Orange"];

我正在尋找的結果:

newArray = ["Big Banana", "Banana Small", "Black Apple"];

因此,我想檢查fruitsSpecified字符串是否包含fruits一部分並將這些結果放入新數組中。 我怎么做? 我發現的所有答案都過於復雜,只尋找完全匹配的內容(例如,數組1中的“ Apple”和數組2中的“ Apple”)。

到目前為止,我有:

function testFunction() {
    newArray = [];
    for (i = 0; i < fruitsSpecified.length; i++) {
        myResult = fruitsSpecified.indexOf(fruits[i]);
        newArray.push(myResult);
    }
    console.log(newArray);
}

這顯然不起作用,因為它只能找到完全匹配的內容。

我檢查了這些問題(但發現它們太復雜了,我相信/希望有一個更簡單的解決方案):
查找項目是否在JavaScript數組中的最佳方法?
如何檢查數組是否在JavaScript中包含對象?

謝謝!

您可以在第一個數組上循環查看第二個數組的每個元素是否包含第一個數組的當前元素:

function testFunction() {
    var newArray = [];
    for (var i = 0; i < fruits.length; i++) {
        for(var j = 0; j < fruitsSpecified.length; j++)
        {
            if(fruitsSpecified[j].indexOf(fruits[i]) != -1)
            {
                newArray.push(fruitsSpecified[j]);
            }
        }
    }
    console.log(newArray);
}

控制台輸出:

["Big Banana", "Banana Small", "Black Apple"]

如果需要,可以通過將數組作為參數傳遞來使其更通用:

 function testFunction(fruits, fruitsSpecified) {
    var newArray = [];
    for (var i = 0; i < fruits.length; i++) {
        for(var j = 0; j < fruitsSpecified.length; j++)
        {
            if(fruitsSpecified[j].indexOf(fruits[i]) != -1)
            {
                newArray.push(fruitsSpecified[j]);
            }
        }
    }
    console.log(newArray);
    return newArray;
}

您可以這樣稱呼它:

var fruits = ["Banana", "Apple"];
var fruitsSpecified = ["Big Banana", "Banana Small", "Black Apple", "Big Orange"];
var newArray = testFunction(fruits, fruitsSpecified);
console.log(newArray);

使用.filter() .some().indexOf()

var result = fruitsSpecified.filter(function(fs) {
    return fruits.some(function(ff) { return fs.indexOf(ff) > -1 });
});

 var fruits = ["Banana", "Apple"]; var fruitsSpecified = ["Big Banana", "Banana Small", "Black Apple", "Big Orange"]; var result = fruitsSpecified.filter(function(fs) { return fruits.some(function(ff) { return fs.indexOf(ff) > -1 }); }); document.body.innerHTML = "<pre>" + JSON.stringify(result, null, 2) + "</pre>"; 

在現代瀏覽器和NodeJS上,您可以使用filter ,通過someindexOf測試fruitsSpecified數組項。 這樣做的主要好處是,您可以遍歷數組以僅搜索一次,然后如果有任何搜索詞匹配,則該搜索循環將跳過其余搜索詞。

 var fruits = ["Banana", "Apple"]; var fruitsSpecified = ["Big Banana", "Banana Small", "Black Apple", "Big Orange"]; function testFunction(arr, searchArr) { return arr.filter(function(item) { return searchArr.some(function(searchTerm) { return item.indexOf(searchTerm) > -1; }); }); } var newArray = testFunction(fruitsSpecified, fruits); document.write('<pre>' + JSON.stringify(newArray) + '</pre>'); 

暫無
暫無

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

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