我会直言不讳。我有两个数组:
fruits = ["Banana", "Apple"];
fruitsSpecified = ["Big Banana", "Banana Small", "Black Apple", "Big Orange"];
我正在寻找的结果:
newArray = ["Big Banana", "Banana Small", "Black Apple"];
所以我想检查fruitsSpecified
字符串是否包含fruits
的一部分,并将这些结果放入新数组中。我怎么做?我找到的所有答案都过于复杂,仅查看完全匹配(例如" Apple"阵列#1和#34; Apple"阵列#2)。
到目前为止,我有这个:
function testFunction() {
newArray = [];
for (i = 0; i < fruitsSpecified.length; i++) {
myResult = fruitsSpecified.indexOf(fruits[i]);
newArray.push(myResult);
}
console.log(newArray);
}
这显然不起作用,因为它只找到完全匹配。
我已经检查了这些问题(但发现它们太复杂了,我相信/希望有一个更简单的解决方案):
Best way to find if an item is in a JavaScript array?
How do I check if an array includes an object in JavaScript?
谢谢!
答案 0 :(得分:4)
您可以循环第一个数组,看看第二个数组的每个元素是否包含第一个数组的当前元素:
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);
答案 1 :(得分:3)
使用.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>";
答案 2 :(得分:0)
在现代浏览器和NodeJS上,您可以使用filter
使用some
和indexOf
来测试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>');