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

时间:2019-03-09 16:36:00

标签: javascript jquery arrays multidimensional-array

我有这个带有内部数组的数组:

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

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

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

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

3 个答案:

答案 0 :(得分:2)

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

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    // 1. hide it in the current view controller you want it hidden in
    navigationController?.navigationBar.setValue(true, forKey: "hidesShadow")
    navigationController?.navigationBar.layoutIfNeeded()
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(true)

    // 2. show it in when pushing or popping in the next view controller
    navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
    navigationController?.navigationBar.setValue(false, forKey: "hidesShadow")
    navigationController?.navigationBar.layoutIfNeeded()
}

答案 1 :(得分:2)

一种解决方案是使用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;}

答案 2 :(得分:2)

如果有多个比赛,则不清楚您要做什么。如果只关心第一个匹配项,请使用 find 方法,如果您希望所有匹配的行都使用 filter 查找返回单行,过滤器返回包含所有匹配行的新数组。

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

例如

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

应该返回匹配数= [[“” 81“,” 84“]];

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

过滤器返回匹配行的新数组,地图然后遍历该数组并创建一个新数组,其中每个元素都是具有第一个元素的行列已删除。

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

通读JavaScript array reference

如果您还没有