[英]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“]];
然后,您可能想要决定如果结果数组为空或包含多个匹配项时该怎么办。
过滤器返回匹配行的新数组,然后映射通过该数组并创建一个新数组,该数组的每个元素都是删除了第一列的行。
这种“流”处理趋向于取代显式循环。 可以说,一旦掌握了它,它就会变得更加清晰。
如果您还没有
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.