繁体   English   中英

根据特定索引中的 2 个或多个值过滤嵌套数组

[英]Filtering a nested array based on 2 or more values in specific indices

我有一个简单的嵌套数组,如下所示:

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

每个子数组的索引为 0 - 3。假设我想要一个 function 来获取索引 2 的值,其中索引 1 =“4.2”,索引 3 =“Kramer Street”。 我知道我可以使用类似下面的方法来返回匹配 ["4.2", "Kramer Street"] 的子数组,但在我的问题中,这很棘手,因为从技术上讲,它返回 2 个子数组,我只想要一个匹配基于指定的索引:

 var test_array = [ ["0", "0.1", "4.2", "Kramer Street"], ["1", "0.2", "3.5", "Lamar Avenue"], ["3", "4.2", "7.1", "Kramer Street"] ]; function matcher(array1, array2) { return array1.every(value => array2.includes(value)); } function array_parser(array, keywords) { return array.filter(values => matcher(keywords, values)); } var new_array = array_parser(test_array, ["4.2", "Kramer Street"]); console.log(new_array);

由于要过滤索引和值匹配的数组,因此将 Object 作为第二个参数传递,其中属性是唯一索引,值是要匹配的字符串。 由于数组索引本身是唯一的,因此 object 是最合适的,因为它的属性也必须是唯一的。

比使用以下组合: Array.prototype.filterArray.prototype.every最后匹配Object.entries对:

 /** * Filter Array of sub-Arrays where "indexes have value" * @param {Array} arr Array to filter * @param {Object} ob Object with index/value pairs * @return {Array} A filtered array of subarrays. */ const filterByIndexValue = (arr, ob) => arr.filter(sub => Object.entries(ob).every(([i, v]) => sub[i] === v)); // DEMO TIME: const test_array = [ ["0", "0.1", "4.2", "Kramer Street"], ["3", "4.2", "7.1", "Kramer Street"], // << get this one ["6", "0.2", "3.5", "Lamar Avenue"], ["99", "4.2", "99.1", "Kramer Street"], // << get this one ]; // Filter test_array where sub-arrays // index 1 has value "4.2" and // index 3 has value "Kramer Street" const new_array = filterByIndexValue(test_array, { 1: "4.2", 3: "Kramer Street" }); console.log(new_array);

您可以使用Array.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"]
];

test_array.find(arr => arr[1] === "4.2" && arr[3] === "Kramer Street")[2]

暂无
暂无

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

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