[英]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.