在多维数组中查找元素并在其后添加内容

时间:2014-08-06 09:46:21

标签: 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');
    }
});

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

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

2 个答案:

答案 0 :(得分:4)

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

虽然可以进行一些优化:

  • 不要使用$.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之类的兼容性功能{1}}或$.inArray因为它们主要增加了开销。

答案 1 :(得分:0)

应该像myArray[0][1].splice(2, 0, 'Element X)

一样简单

假设myArray是顶级数组