我有一个如下所示的嵌套数组:
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 = 道路类型,索引 5 = 道路名称。在我的应用程序中,用户必须选择 road_name。我创建了一个简单的函数,它接受值并返回一个嵌套数组,其中包含包含该值的子数组:
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。如果他们这样做,我想成为一个过滤器并返回一个基于值列表/数组的数组:
key_words = ["Somerset", "Norfolk Road"]
或
key_words = ["Somerset", "Local", "Norfolk Road"]
如何实现?
答案 0 :(得分:2)
array_parser
函数以接受嵌套数组数组和关键字数组。
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;};