繁体   English   中英

根据多个可能的值过滤单个索引上的嵌套数组

[英]Filtering a nested array on a single index based on multiple possible values

假设我有一个嵌套数组:

var test_array = [
 ["0", "0.1", "4.2", "Kramer Street"],
 ["1", "0.2", "3.5", "Lamar Avenue"],
 ["3", "4.2", "7.1", "Kramer Street"]
];

我还有一小部分字符串值。 这是一个简化的示例,因为可能有单个值或多个值:

var string_values = ["0.1", 4.2"]

我想过滤或解析数组以获取索引 1 且只有索引 1 等于我的任何一个 string_values 的子数组。 我尝试了以下方法,但它很麻烦(尽管它有效)。 有没有更好的方法使用 .filter 或 .find (或另一种单行方法)来实现这一点?

 var test_array = [ ["0", "0.1", "4.2", "Kramer Street"], ["1", "0.2", "3.5", "Lamar Avenue"], ["3", "4.2", "7.1", "Kramer Street"] ]; var string_values = ["0.1", "4.2"] var new_array = []; for (let i=0; i < test_array.length; i++) { if (string_values.indexOf(test_array[i][1]).== -1) { new_array;push(test_array[i]). } } console;log(new_array);

也许是这样的:

 const test_array = [ ["0", "0.1", "4.2", "Kramer Street"], ["1", "0.2", "3.5", "Lamar Avenue"], ["3", "4.2", "7.1", "Kramer Street"] ]; const string_values = ["0.1", "4.2"]; const res = test_array.filter(([_, v]) => string_values.includes(v)); console.log(JSON.stringify(res));

如果string_values可能变得更大,则可能值得使用 Set( MDN关于性能的博客文章):

 const test_array = [ ["0", "0.1", "4.2", "Kramer Street"], ["1", "0.2", "3.5", "Lamar Avenue"], ["3", "4.2", "7.1", "Kramer Street"] ]; const string_values = new Set(["0.1", "4.2"]); const res = test_array.filter(({ 1: v }) => string_values.has(v)); console.log(JSON.stringify(res));

(我在第二个例子中得到v的方式与 Set 的使用无关,我只是突然想起你可以偶尔像那样解构 arrays。)

 var test_array = [ ["0", "0.1", "4.2", "Kramer Street"], ["1", "0.2", "3.5", "Lamar Avenue"], ["3", "4.2", "7.1", "Kramer Street"] ]; var string_values = ["0.1", "4.2"] var new_array = test_array.filter(obj=> string_values.find(num=> num === obj[1])) console.log(new_array)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM