如何在javascript中过滤多个值(OR操作)

lle*_*aly 4 javascript arrays

我有一个数组数组,我需要按元素的位置0进行过滤.

我需要过滤从另一个数组中提取的多个值,因此OR运算符不是我的方式,因为我拥有的值的数量不固定.

var arr = [
    ["202",27,44],
    ["202",194,35],
    ["200",233,344],
    ["190",333,444],
];

var newArr = arr.filter(function(item){
    //fixed amount of values, not working for my purpose
    return item[0] === "190" || item = "200"
});
Run Code Online (Sandbox Code Playgroud)

我需要类似的东西

var newArr = arr.filter(function(item){    
    return item[0] === filterValues
    //where filterValues = ["190","200",etc]
});
Run Code Online (Sandbox Code Playgroud)

这种情况下的函数应该返回:

[["200",233,344],["190",333,444]]
Run Code Online (Sandbox Code Playgroud)

这个问题使用了underscorejs,但我是javascript的新手,所以我很难将它应用到我的问题.

是Angularjs.

我希望你能帮我一臂之力.

PS:对不起我的英语,不是我的母语.

问候

Cup*_*Tae 10

您可以indexOf()在数组上使用以查找数组是否包含值.它将-1在不存在的情况下存在,否则它将是该值的第一个实例的数组中的索引,即>=0

所以,例如:

arr.filter(function(item){return ["190","200"].indexOf(item[0])>=0})
Run Code Online (Sandbox Code Playgroud)

根据您的评论,过滤器键嵌入在嵌套数组中.您可以使用map()例如提取这些

var keys = [["190",222],["200",344]].map(function(inner){return inner[0]});
Run Code Online (Sandbox Code Playgroud)

实现此功能的功能(感谢@Shomz的大部分代码)如下所示:

var arr = [
    ["202",27,44],
    ["202",194,35],
    ["200",233,344],
    ["190",333,444],
];
  
function myFilter(query) {
  return arr.filter(function(item){
    return query.indexOf(item[0]) >= 0;
  })
}

var q = [["190",222],["200",344]];
var keys = q.map(function(inner){
  return inner[0];
});

alert(myFilter(keys));
Run Code Online (Sandbox Code Playgroud)


Seb*_*osa 3

const compare_set = ["190", "200", "201"] // here we can set the numbers we want to use to filter the rows, only for educational purposes, i suppose you will extract them from another place.

const result = arr.filter(o => compare_set.includes(o[0]))
Run Code Online (Sandbox Code Playgroud)

Array.includes在 Array 中查找一个值,如果存在则返回 true,而 filter 则需要 true。如果不是则被丢弃。