javascript - 在多维数组中查找元素并在其后面添加一些内容

标签 javascript jquery arrays multidimensional-array

我有一个多维数组

[0] {
    [0] {
        [0]: 'Element 1'
        [1]: 'Element 2'
        [2]: 'Element 3'
        [3]: 'Element 4'
    }
    [1] {
        [0]: 'Element 5'
        [1]: 'Element 6'
        [2]: 'Element 7'
        [3]: 'Element 8'
    }
    [2] {
        [0]: 'Element 9'
        [1]: 'Element 10'
        [2]: 'Element 11'
        [3]: 'Element 12'
    }
}

现在,我想在元素 6 和 7 之间添加一个元素。目前,我正在使用这个

$.map($myArray, function(i, e) {
    if (i.indexOf('Element 6') >= 0) {
        $myArray.splice($.inArray('Element 6', $myArray[e]) + 1, 0, 'Element X');
    }
});

但是,我非常确定,这是一个次优的解决方案,并且有一种更简单(且更有效)的方法来实现此目的。

也许,我只是想得太复杂了。

最佳答案

这或多或少是个好方法,你无法避免循环。

不过还有一些优化的地方:

  • 不要使用$.map,而是使用标准的for循环。 $.map 很漂亮,但在每一步都会调用一个函数
  • 找到项目后,使用 break 停止迭代
  • 不要搜索该项目的位置两次
  • 不要使用$.inArray(尤其是您之前使用过indexOf)

这是一个更好的代码:

for (var i=0; i<$myArray.length; i++) {
    var index = $myArray[i].indexOf('Element 6');
    if (~index) {
        $myArray[i].splice(index+1, 0, 'Element X');
        break;
    }
}

Simple performance comparison (请注意,性能增益将取决于数据)

更一般地说,当您不需要与非常旧的(几乎被遗忘的)浏览器兼容时,并且我认为您在使用 indexOf 时不需要这种兼容性,您应该避免使用兼容性诸如 $.map$.inArray 之类的函数,因为它们大多会增加开销。

关于javascript - 在多维数组中查找元素并在其后面添加一些内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25157114/

相关文章:

java - 在不转换为列表的情况下在 MongoDB 中存储 float 数组

javascript - 事件 'Window load' 在带有原型(prototype)的 Opera 中不起作用

javascript - 我想在鼠标位于或不在组合框上时更改组合框

javascript - 如何完善这个 JS 数组搜索功能?

c - 数组类型 char[] 不可赋值

javascript - 使用脚本自动执行任务

javascript - 如何使用正则表达式在文本中允许撇号

javascript - 在 AWS Lambda 中模拟

javascript - 在 codeigniter 中使用 ajax 时出错

JavaScript 和自执行函数