根据多个值过滤嵌套数组
Filtering nested arrays based on multiple values
我有一个嵌套数组,如下所示:
var nested_array = [
["18081163__,0,0.15,15238", "0", "0.15", "Somerset", "Local", "Norfolk Road"],
["18081165__,0.7,0.25,15239", "0", "0.15", "Somerset", "State", "Norfolk Road"],
["18081153__,0.1,0.25,15240", "0.1", "0.25", "Cumberland", "Local", "Potter Terrace"],
["18081164__,1.1,2.25,15241", "1.1", "2.25", "Cumberland", "State", "Jones Street"]
]
在每个子数组中,索引 3 = 县,索引 4 = road_type,索引 5 = road_name。在我的应用程序中,用户必须选择road_name。我创建了一个简单的函数,它接受值和 returns 一个嵌套数组,其子数组包含该值:
function array_parser(old_array, key_word) {
let new_array = [];
for (let i = 0; i < old_array.length; i++) {
if (old_array[i].includes(key_word)) {
new_array.push(old_array[i]);
}
}
return new_array;
}
这适用于单个值,但我希望用户也能够选择县和 road_type 可选。如果他们这样做,我想成为一个过滤器和 return 一个基于 list/array 个值的数组:
key_words = ["Somerset", "Norfolk Road"]
或
key_words = ["Somerset", "Local", "Norfolk Road"]
如何实现?
- 您可以创建一个接受关键字数组和需要比较条件的数组的函数。
- 它应该能够使用 Array#every wherein the predicate callback function uses Array#includes 来迭代每个关键字,用于针对每个迭代关键字进行比较的数组。
- 您可以修改
array_parser
函数以接受嵌套数组和关键字数组。
- 您可以使用Array#filter,其中谓词回调函数将使用之前创建的匹配器函数来匹配关键字条件。
function matcher(array1, array2) {
return array1.every(value => array2.includes(value));
}
function array_parser(array, keywords) {
return array.filter(values => matcher(keywords, values));
}
var nested_array = [
["18081163__,0,0.15,15238", "0", "0.15", "Somerset", "Local", "Norfolk Road"],
["18081165__,0.7,0.25,15239", "0", "0.15", "Somerset", "State", "Norfolk Road"],
["18081153__,0.1,0.25,15240", "0.1", "0.25", "Cumberland", "Local", "Potter Terrace"],
["18081164__,1.1,2.25,15241", "1.1", "2.25", "Cumberland", "State", "Jones Street"]
];
function matcher(array1, array2) {
return array1.every(value => array2.includes(value));
}
function array_parser(array, keywords) {
return array.filter(values => matcher(keywords, values));
}
let keywords = ["Somerset", "Norfolk Road"];
console.log('keywords =', keywords);
console.log(array_parser(nested_array, keywords));
keywords = [ "Somerset", "Local", "Norfolk Road"];
console.log('keywords =', keywords);
console.log(array_parser(nested_array, keywords));
.as-console-wrapper{top: 0; max-height: unset !important;};
我有一个嵌套数组,如下所示:
var nested_array = [
["18081163__,0,0.15,15238", "0", "0.15", "Somerset", "Local", "Norfolk Road"],
["18081165__,0.7,0.25,15239", "0", "0.15", "Somerset", "State", "Norfolk Road"],
["18081153__,0.1,0.25,15240", "0.1", "0.25", "Cumberland", "Local", "Potter Terrace"],
["18081164__,1.1,2.25,15241", "1.1", "2.25", "Cumberland", "State", "Jones Street"]
]
在每个子数组中,索引 3 = 县,索引 4 = road_type,索引 5 = road_name。在我的应用程序中,用户必须选择road_name。我创建了一个简单的函数,它接受值和 returns 一个嵌套数组,其子数组包含该值:
function array_parser(old_array, key_word) {
let new_array = [];
for (let i = 0; i < old_array.length; i++) {
if (old_array[i].includes(key_word)) {
new_array.push(old_array[i]);
}
}
return new_array;
}
这适用于单个值,但我希望用户也能够选择县和 road_type 可选。如果他们这样做,我想成为一个过滤器和 return 一个基于 list/array 个值的数组:
key_words = ["Somerset", "Norfolk Road"]
或
key_words = ["Somerset", "Local", "Norfolk Road"]
如何实现?
- 您可以创建一个接受关键字数组和需要比较条件的数组的函数。
- 它应该能够使用 Array#every wherein the predicate callback function uses Array#includes 来迭代每个关键字,用于针对每个迭代关键字进行比较的数组。
- 您可以修改
array_parser
函数以接受嵌套数组和关键字数组。- 您可以使用Array#filter,其中谓词回调函数将使用之前创建的匹配器函数来匹配关键字条件。
function matcher(array1, array2) {
return array1.every(value => array2.includes(value));
}
function array_parser(array, keywords) {
return array.filter(values => matcher(keywords, values));
}
var nested_array = [
["18081163__,0,0.15,15238", "0", "0.15", "Somerset", "Local", "Norfolk Road"],
["18081165__,0.7,0.25,15239", "0", "0.15", "Somerset", "State", "Norfolk Road"],
["18081153__,0.1,0.25,15240", "0.1", "0.25", "Cumberland", "Local", "Potter Terrace"],
["18081164__,1.1,2.25,15241", "1.1", "2.25", "Cumberland", "State", "Jones Street"]
];
function matcher(array1, array2) {
return array1.every(value => array2.includes(value));
}
function array_parser(array, keywords) {
return array.filter(values => matcher(keywords, values));
}
let keywords = ["Somerset", "Norfolk Road"];
console.log('keywords =', keywords);
console.log(array_parser(nested_array, keywords));
keywords = [ "Somerset", "Local", "Norfolk Road"];
console.log('keywords =', keywords);
console.log(array_parser(nested_array, keywords));
.as-console-wrapper{top: 0; max-height: unset !important;};