Javascript 基于多个值筛选嵌套数组

Javascript 基于多个值筛选嵌套数组,javascript,arrays,filter,include,Javascript,Arrays,Filter,Include,我有一个嵌套数组,如下所示: var nested_array = [ ["18081163__,0,0.15,15238", "0", "0.15", "Somerset", "Local", "Norfolk Road"], ["18081165__,0.7,0.25,15239", "0", "0.15"

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

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=道路名称。在我的应用程序中,用户必须选择道路名称。我创建了一个简单函数,该函数接受值并返回一个嵌套数组,其中包含该值的子数组:

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;
}

如何做到这一点?

  • 您可以创建一个函数,该函数接受关键字数组和需要比较条件的数组。
    • 它应该能够使用谓词回调函数对每个迭代关键字的比较数组使用的方法来迭代每个关键字
  • 您可以修改
    array\u parser
    函数以接受嵌套数组和关键字数组。
    • 您可以使用,其中谓词回调函数将使用先前创建的matcher函数来匹配关键字条件

var嵌套数组=[
[“18081163,0,0.1515238”,“0”,“0.15”,“萨默塞特”,“当地”,“诺福克路”],
[“18081165,0.7,0.2515239”,“0”,“0.15”,“萨默塞特”,“州”,“诺福克路”],
[“18081153,0.1,0.2515240”,“0.1”,“0.25”,“坎伯兰”,“当地”,“波特台”],
[“18081164,1.1,2.2515241”,“1.1”,“2.25”,“坎伯兰”,“州”,“琼斯街”]
];
函数匹配器(array1,array2){
返回array1.every(value=>array2.includes(value));
}
函数数组\语法分析器(数组,关键字){
返回array.filter(值=>matcher(关键字,值));
}
let关键字=[“萨默塞特”,“诺福克路];
log('keywords=',keywords);
log(数组解析器(嵌套数组,关键字));
关键词=[“萨默塞特”、“当地”、“诺福克路”];
log('keywords=',keywords);
log(数组解析器(嵌套数组,关键字))
.as控制台包装{top:0;最大高度:unset!important;}
  • 您可以创建一个函数,该函数接受关键字数组和需要比较条件的数组。
    • 它应该能够使用谓词回调函数对每个迭代关键字的比较数组使用的方法来迭代每个关键字
  • 您可以修改
    array\u parser
    函数以接受嵌套数组和关键字数组。
    • 您可以使用,其中谓词回调函数将使用先前创建的matcher函数来匹配关键字条件

var嵌套数组=[
[“18081163,0,0.1515238”,“0”,“0.15”,“萨默塞特”,“当地”,“诺福克路”],
[“18081165,0.7,0.2515239”,“0”,“0.15”,“萨默塞特”,“州”,“诺福克路”],
[“18081153,0.1,0.2515240”,“0.1”,“0.25”,“坎伯兰”,“当地”,“波特台”],
[“18081164,1.1,2.2515241”,“1.1”,“2.25”,“坎伯兰”,“州”,“琼斯街”]
];
函数匹配器(array1,array2){
返回array1.every(value=>array2.includes(value));
}
函数数组\语法分析器(数组,关键字){
返回array.filter(值=>matcher(关键字,值));
}
let关键字=[“萨默塞特”,“诺福克路];
log('keywords=',keywords);
log(数组解析器(嵌套数组,关键字));
关键词=[“萨默塞特”、“当地”、“诺福克路”];
log('keywords=',keywords);
log(数组解析器(嵌套数组,关键字))

.as控制台包装{top:0;最大高度:unset!important;}快速问题,这些关键字没有约束吗?如果真的有一条与州同名的路呢?那么,对于road_类型(索引4),它们基于有限的下拉列表或选择:[州、本地、州际、其他]。道路名称(索引5)将全部包含道路、街道、车道等,或者类似于US-95或其他名称,因此,即使道路名称为“State Street”,道路类型为“State”,我认为这不会成为问题(尽管可能我错了。快速提问,这些关键字是否没有约束?如果确实有一条道路包含与州相同的名称,该怎么办?这是否也是解析数组中的有效包含项?因此,对于road_类型(索引4),这些关键字基于有限的下拉列表或选项:[州、本地、州际、其他]。road_名称(索引5)都会有道路、街道、车道等……或者会像US-95之类,所以即使道路名称是“State Street”,道路类型是“State”,我也不认为这会是一个问题(尽管可能我错了。这是一个很棒的流线型解决方案。很好用!这是一个很棒的流线型解决方案。很好用!
 key_words = ["Somerset", "Norfolk Road"] 
key_words = ["Somerset", "Local", "Norfolk Road"]
function matcher(array1, array2) {
  return array1.every(value => array2.includes(value));
}

function array_parser(array, keywords) {
  return array.filter(values => matcher(keywords, values));
}