JavaScript中提取数组间匹配值并保存到新数组的实现问题
解决从嵌套数组中提取匹配元素的问题
嘿,作为编程新手能自己动手搭代码框架已经超棒啦!我看你已经开了个头,现在帮你把代码补全,还会一步步给你讲明白逻辑~
你的需求很明确:声明变量a3存储从a2里提取到的所有和a1匹配的值,遍历a2的所有元素,只留下和a1里的"5"、"10"一致的元素。
完整的循环实现代码
这是补全后的基础循环写法,适合新手理解底层逻辑:
var a1 = ["5", "10"]; var a2 = [ ["10", "2", "10", "E", "5", "5", "u", "0", "5", "10", ":", "5"], ["10", "10", "5", "9", "10", "}", "5", "l", "5", "5", "5", "˜"], ["x", ".", "d", "2", "|", "[", "z", "8", "s", "d", "2", "5"] ]; var a3 = []; // 第一层循环:遍历a2中的每个子数组 for (var i = 0; i < a2.length; i++) { // 第二层循环:遍历当前子数组里的每一个元素 for (var j = 0; j < a2[i].length; j++) { // 检查当前元素是否在a1的匹配列表里 if (a1.includes(a2[i][j])) { // 如果匹配,就把元素添加到结果数组a3中 a3.push(a2[i][j]); } } } // 打印结果验证 console.log(a3); // 输出结果:["10","10","5","5","5","10","5","10","10","5","10","5","5","5","5","5"]
代码逻辑拆解
- 第一层循环
for (var i = 0; i < a2.length; i++):a2是一个嵌套数组,这一步是逐个取出a2里的子数组(比如第一个子数组就是["10", "2", "10", ...])。 - 第二层循环
for (var j = 0; j < a2[i].length; j++):针对当前拿到的子数组,逐个遍历里面的每一个元素。 - 判断条件
a1.includes(a2[i][j]):includes是数组的内置方法,专门用来检查数组里是否包含某个值,这里就是确认当前元素是不是我们要找的"5"或"10"。 a3.push(a2[i][j]):如果元素符合要求,就把它添加到结果数组a3的末尾。
进阶简洁写法(ES6+)
如果想让代码更简洁,还可以用数组的flat()和filter()方法,这是更现代的JavaScript写法,新手也可以了解一下:
var a1 = ["5", "10"]; var a2 = [ ["10", "2", "10", "E", "5", "5", "u", "0", "5", "10", ":", "5"], ["10", "10", "5", "9", "10", "}", "5", "l", "5", "5", "5", "˜"], ["x", ".", "d", "2", "|", "[", "z", "8", "s", "d", "2", "5"] ]; // 先把嵌套数组转成一维数组,再过滤出匹配a1的元素 var a3 = a2.flat().filter(item => a1.includes(item)); console.log(a3); // 和循环写法的结果完全一致
a2.flat():把嵌套的多维数组直接转换成一维数组,省去了第一层循环的麻烦。filter(item => a1.includes(item)):遍历扁平化后的数组,只保留满足条件(在a1里的元素)的项,自动帮我们完成了第二层循环和判断逻辑。
内容的提问来源于stack exchange,提问作者user9609362
相关产品推荐
相关产品推荐

