在嵌套数组中搜索列并返回行元素
Posted
技术标签:
【中文标题】在嵌套数组中搜索列并返回行元素【英文标题】:Search column and return row elements in nested array 【发布时间】:2019-07-31 10:44:54 【问题描述】:我有这个带有内部数组的数组:
var testdata1= [
["1001","55","58"],
["1002","64"],
["1003","73","76","77"],
["1004","81","84"],
["1005","97"],
];
我想要的是按第一列查找一行,然后将该行中的所有其他元素放入一个新数组中。所以如果我搜索 "1003"
我会得到:
newarray = [["73","76","77],];
经过 3 小时徒劳的搜索,如果有人能让我摆脱痛苦并告诉我最好的方法,我将不胜感激。非常感谢任何帮助。
【问题讨论】:
这只需要一个循环来查找行和另一个循环将元素复制到一个新数组中...... 【参考方案1】:如果有不止一场比赛,你想做什么问题并不清楚。如果您只关心第一个匹配,请使用 find 方法,如果您希望所有匹配的行使用 filter。 find 返回单行,filter 返回包含所有匹配行的新数组。
如果您想丢弃键列,您可以使用扩展运算符(如 @Shidersz 建议的那样)或 slice 方法。
例如
let hits = arr.filter(row => row[0] === "1004")
.map(row => row.slice(1));
应该返回 hits = [["81","84"]];
如果结果数组为空或包含多个匹配项,您可能会想决定该怎么做。
过滤器返回一个新的匹配行数组,map然后遍历这个数组并创建一个新数组,其中每个元素都是第一个元素的行列已删除。
这种“流”处理倾向于取代显式循环。可以说,一旦你掌握了它,它就会更清楚。
阅读javascript array reference
如果你还没有
【讨论】:
这实际上是非常有用的输入,非常感谢。【参考方案2】:只需使用.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);
【讨论】:
好吧,现在我感觉自己很笨。非常感谢您的帮助。 @Silverburch 欢迎您。接受对您最有帮助的答案,以便其他人也知道这一点【参考方案3】:一种解决方案是使用Array.find() 和destructuring:
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;
【讨论】:
findByFirstCol(testdata1, "1006")
不错的选择 - 但不幸的是我可怜的大脑有点难!
@Silverburch 不要让代码吓到你,你可以在未来学习如何使用这些功能。还是谢谢!以上是关于在嵌套数组中搜索列并返回行元素的主要内容,如果未能解决你的问题,请参考以下文章