javascript - 除了嵌套for循环之外的多维js[数组的数组]的现代查询方法

标签 javascript jquery multidimensional-array

我在数组数组中有一个数组 [arr] [ [arr], [arr1], [arr2] ]

例如,我要检查以下数组中的["prague",50,14]:

[
 ["prague",50,14],
 ["vienna",48.2, 16.4],
 ["bratislava",48.15, 17.1]
]

理想情况下,我想使用单个参数["prague",50,14]查询此[arrays]数组,以查明我的项目之前是否已经存在决定是否添加新项目或不避免重复:

  1. 检查现有的 [arrays] 数组以确保 [ar​​r] 不存在
  2. 如果 [arr] 未找到,则将新项目添加/插入 [arrays] 数组

当前嵌套的 for 方法

现在,我当前执行此操作的方法是迭代数组数组,然后循环遍历每个元素

for (var i = 0; i < arr.length; i++) {
  for (var k = 0; k < arr[i].length; k++) {
    if (arr[i][0] == "prague" && arr[i][1] == 50 && arr[i][2] == 14){
      console.log(arr[i][0]+", "+arr[i][1]+", "+arr[i][2]); // if item exists already
    } else {
      // code to add new item 
    }
  }
}

本身也不理想,因为 if (arr[i][0] == "prague"&& arr[i][1] == 50 && arr[i][2] == 14) 产生多个结果(见下面的代码片段)

寻找现代方法

在我被“重复”帖子回复淹没之前,我只想说,我已经广泛查看并阅读了有关数组的大量帖子,多维数组,其中许多实际上是对象,等等,但我仍然一无所知。

我还没有使用简单且类似的数组示例真正找到一个好的问题/答案,因此我决定创建这篇关于查询多维 js 数组(而不是对象数组)的附加文章希望他们能帮助像我这样的代码爱好者 😉

I'm convinced there should be a far simpler modern way to do this which is mainstream acceptable and far easier then my traditional solution.

尝试无果

起初我以为我可以使用 Javascript include() 方法来做到这一点,例如arr.includes([p1,p2,p3]) 或 jQuery inArray() 方法,例如$.inArray([p1,p2,p3], arr) 但似乎都不起作用。

我怀疑这是因为这些方法不适用于像我在这里处理的多维数组,对吗?

也许我应该考虑将上述方法与我的“传统”方法结合起来,也许它可以提高代码的可读性,或者也许确实没有更好的方法。无论如何,我很高兴看到这里的人如何处理这些类型的多维数组查询。

代码片段

// our array of arrays
var arr = [];
arr.push(["prague",50,14]);
arr.push(["vienna",48.2, 16.4]);
arr.push(["bratislava",48.15, 17.1]);


// params to check for
var p1 = "prague", p2 = 50, p3 = 14;
console.log("Check for Params: "+p1+", "+p2+", "+p3)
console.log("Expected values: as above ||\"true\" || \"int\" other than -1");
console.log("Our array of arrays:\n", arr);

console.log("_________________________________________________________");

console.log("Current nested for loop method:")
for (var i = 0; i < arr.length; i++) {
  for (var k = 0; k < arr[i].length; k++) {
    if (arr[i][0] == "prague" && arr[i][1] == 50 && arr[i][2] == 14){
      console.log(arr[i][0]+", "+arr[i][1]+", "+arr[i][2]); // if item exists already
    } else {
      // code to add new item 
    }
  }
}

console.log("_________________________________________________________");

console.log("[Failed using: jQuery inArray() method");
var prague = $.inArray([p1,p2,p3], arr);
console.log(prague);

console.log("_________________________________________________________");

console.log("[Failed using: Javascript includes() method");
var prague2 = arr.includes([p1,p2,p3]);
console.log(prague2);

var prague3 = arr.includes(p1,p2,p3);
console.log(prague3);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

最佳答案

您可以对请求的数组和给定数据的项目进行字符串化。

然后找到该项目。

var data = [["prague", 50, 14], ["vienna", 48.2, 16.4], ["bratislava", 48.15, 17.1]],
    request = ["prague", 50, 14],
    json = JSON.stringify(request),
    item = data.find(a => JSON.stringify(a) === json);

console.log(item);

关于javascript - 除了嵌套for循环之外的多维js[数组的数组]的现代查询方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60421078/

相关文章:

javascript - 从表单输入创建多维关联数组

c - 如何在汇编中处理二维数组

javascript - 为什么我的 Angular Controller 未定义?

javascript - 如何取消转义在 JavaScript 中

javascript - Node.js 随机抛出写入 EIO 异常

Javascript 在标签上添加 css 类

缩小时出现 Javascript 错误

javascript - jQuery $_FILES 数组为空,在 IE8/9 中使用 blueimp 文件上传插件

javascript - 如何在 .each 迭代中将 .delay 添加到 .click (jquery)

c - 如何在 C 中打印具有特定字符的单词?