繁体   English   中英

搜索嵌套数组中的列和返回行元素

[英]Search column and return row elements in nested array

我有这个数组与内部数组:

var testdata1= [
  ["1001","55","58"],
  ["1002","64"],
  ["1003","73","76","77"],
  ["1004","81","84"],
  ["1005","97"],
];

我想要的是按第一列查找一行,然后将该行中的所有其他元素放入新数组中。 因此,如果我搜索"1003"则会得到:

newarray = [["73","76","77],];

经过3个小时的无结果搜索,如果有人能让我摆脱困境并向我展示最佳方法,我将非常感激。 任何帮助,不胜感激。

只需使用如下的.forEach()循环即可。 此代码循环遍历数组,检查当前数组中的第一个元素是否为所需的数字,如果是,则将该数组的所有值(第一个元素除外)添加到输出数组。

 var testdata1 = [ ["1001", "55", "58"], ["1002", "64"], ["1003", "73", "76", "77"], ["1004", "81", "84"], ["1005", "97"], ]; var searchNumber = 1003; var output = []; testdata1.forEach(e => { if (e[0] == searchNumber) { output.push(e.slice(1)); } }); console.log(output); 

一种解决方案是使用Array.find()解构

 var testdata1= [ ["1001","55","58"], ["1002","64"], ["1003","73","76","77"], ["1004","81","84"], ["1005","97"], ]; const findByFirstCol = (arr, colVal) => { let [first, ...rest] = arr.find(x => x[0] === colVal) || [,"Nothing found"]; return [rest]; } console.log(findByFirstCol(testdata1, "1003")); console.log(findByFirstCol(testdata1, "1009")); 
 .as-console {background-color:black !important; color:lime;} .as-console-wrapper {max-height:100% !important; top:0;} 

从这个问题尚不清楚,如果有多个比赛,您想做什么。 如果只关心第一个匹配项,请使用find方法;如果要所有匹配的行,请使用filter find返回单行, filter返回包含所有匹配行的新数组。

如果要放弃键列,则可以使用散布运算符(如@Shidersz建议)或slice方法。

例如

let hits = arr.filter(row => row[0] === "1004")
           .map(row => row.slice(1));

应该返回点击数= [[“” 81“,” 84“]];

然后,您可能想要决定如果结果数组为空或包含多个匹配项时该怎么办。

过滤器返回匹配行的新数组,然后映射通过该数组并创建一个新数组,该数组的每个元素都是删除了第一列的行。

这种“流”处理趋向于取代显式循环。 可以说,一旦掌握了它,它就会变得更加清晰。

通读JavaScript数组参考

如果您还没有

暂无
暂无

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

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