检查数组是否包含JavaScript中另一个数组的一部分

Bak*_*aki 1 javascript arrays

我会直截了当。我有两个数组:

fruits = ["Banana", "Apple"];
fruitsSpecified = ["Big Banana", "Banana Small", "Black Apple", "Big Orange"];
Run Code Online (Sandbox Code Playgroud)

我正在寻找的结果:

newArray = ["Big Banana", "Banana Small", "Black Apple"];
Run Code Online (Sandbox Code Playgroud)

因此,我想检查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);
}
Run Code Online (Sandbox Code Playgroud)

由于只能找到完全匹配的内容,因此显然不起作用。

我已经检查了这些问题(但是发现它们太复杂了,我相信/希望有一个更简单的解决方案):
查找项目是否在JavaScript数组中的最佳方法?
如何检查数组是否在JavaScript中包含对象?

谢谢!

brs*_*o05 5

您可以在第一个数组上循环查看第二个数组的每个元素是否包含第一个数组的当前元素:

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);
}
Run Code Online (Sandbox Code Playgroud)

控制台输出:

["Big Banana", "Banana Small", "Black Apple"]
Run Code Online (Sandbox Code Playgroud)

如果需要,可以通过将数组作为参数传递来使其更通用:

 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;
}
Run Code Online (Sandbox Code Playgroud)

您可以这样称呼它:

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