繁体   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