最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Checking if an array contains part of another array in javascript - Stack Overflow

programmeradmin1浏览0评论

I'll get straight to the point. I have two arrays:

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

The result I'm looking for:

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

So I want to check if fruitsSpecified strings contain part of fruits and put those results into a new array. How do I do that? All the answers I found were over-plicated and looked only for exact matches (e.g. "Apple" in array#1 and "Apple" in array#2).

I have this so far:

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

which obviously does not work since it only finds exact matches.

I have checked these questions (but found them too plicated, I believe/hope there is a simpler solution):
Best way to find if an item is in a JavaScript array?
How do I check if an array includes an object in JavaScript?

Thanks!

I'll get straight to the point. I have two arrays:

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

The result I'm looking for:

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

So I want to check if fruitsSpecified strings contain part of fruits and put those results into a new array. How do I do that? All the answers I found were over-plicated and looked only for exact matches (e.g. "Apple" in array#1 and "Apple" in array#2).

I have this so far:

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

which obviously does not work since it only finds exact matches.

I have checked these questions (but found them too plicated, I believe/hope there is a simpler solution):
Best way to find if an item is in a JavaScript array?
How do I check if an array includes an object in JavaScript?

Thanks!

Share Improve this question edited May 23, 2017 at 12:32 CommunityBot 11 silver badge asked Jul 1, 2015 at 18:34 BakiBaki 6142 gold badges13 silver badges25 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 5

You can loop on your first array and see if each element of the second array contains the current element of your first array:

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

Console Output:

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

If you want you can make it more generic by passing the arrays as parameters:

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

You can call it like this:

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

Pretty simple with .filter(), .some() and .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>";

On modern browsers and NodeJS you could use a filter to test the fruitsSpecified array items using some and indexOf. The main benefit here is that you loop over the array to search only once and then if any search terms match the rest of the search terms are skipped for that search loop.

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

发布评论

评论列表(0)

  1. 暂无评论