fir*_*ger 8 javascript arrays filter
我有一系列人的名字以及他们的语言知识.我想要做的是将过滤器传递到语言列并过滤掉任何不匹配的结果.
这是示例数组
var myArray = [["Steppen", "Spanish Polish"],
["Wolf", "Spanish Polish Tagalog"],
["Amanda", "Spanish"],
["Ada", "Polish"],
["Rhonda", "Spanish Tagalog"]];
Run Code Online (Sandbox Code Playgroud)
传入过滤器,它可以是一种语言,也可以是多种语言.即使过滤器中的一种语言匹配 - 也应该返回结果.因此,例如,"塔加拉族语"的过滤器应该返回 - Wolf和Rhonda."西班牙语波兰语"的过滤器应该归还给所有人 - 西班牙语或波兰语的匹配.
我写了过滤器功能,但由于某种原因它被卡住了,当我通过过滤器"Tagalog"它只迭代到阵列中的第二个单元格(西班牙语波兰语塔加拉族语)并重复多次而不是前进.
我做错了什么,我应该以不同的方式迭代吗?
var userPassedFilter = new Array();
userPassedFilter[0] = "Tagalog";
newArray = consolidatedFilters(myArray, userPassedFilter);
console.log(newArray);
function consolidatedFilters(passedArray, passedFilter)
{
var filteredArray = passedArray.filter(
function(el)
{
for (var i = 0; i < passedArray.length; i++)
{
console.log("i is " + i);
for (var j in passedFilter)
{
console.log("Passed Filter j " + passedFilter[j]);
console.log("Passed Array i " + passedArray[i][1]);
console.log("String Search " + passedArray[i][1].search(passedFilter[j]));
if (passedArray[i][1].search(passedFilter[j]) != -1)
{
return true;
}
}
}
return false;
}
);
return filteredArray;
}
Run Code Online (Sandbox Code Playgroud)
pim*_*vdb 13
对我而言,似乎你让它变得有点过于复杂.
filter,for循环,for in循环).for in循环作为数组.new Array和[...].我稍微更新了一下,看起来这就是你想要的:http://jsfiddle.net/pimvdb/RQ6an/.
var myArray = [["Steppen", "Spanish Polish"],
["Wolf", "Spanish Polish Tagalog"],
["Amanda", "Spanish"],
["Ada", "Polish"],
["Rhonda", "Spanish Tagalog"]];
var userPassedFilter = ["Tagalog"];
newArray = consolidatedFilters(myArray, userPassedFilter);
console.log(newArray);
function consolidatedFilters(passedArray, passedFilter) {
var filteredArray = passedArray.filter(
function(el) { // executed for each person
for (var i = 0; i < passedFilter.length; i++) { // iterate over filter
if (el[1].indexOf(passedFilter[i]) != -1) {
return true; // if this person knows this language
}
}
return false;
}
);
return filteredArray;
}
Run Code Online (Sandbox Code Playgroud)
小智 8
这是ES6方式的最终解决方案: 无需在另一个线程中再次搜索同一查询。
var array1 = ['a', 'b', 'c', 'd', 'e'];
var array2 = ['b', 'd', 'f'];
array1 = array1.filter(function(item) {
return !array2.includes(item);
})
console.log(array1); // [ 'a', 'c', 'e' ]
console.log(array2); // [ 'b', 'd', 'f' ]Run Code Online (Sandbox Code Playgroud)