【问题标题】:Find element in multidimensional array and add something after it在多维数组中查找元素并在其后添加一些内容
【发布时间】:2014-09-29 04:41:29
【问题描述】:

我有一个多维数组

[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');
    }
});

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

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

【问题讨论】:

  • 您如何传递索引以在其间添加元素,请参阅此链接可能会对您有所帮助。 stackoverflow.com/questions/16308252/… 任何您需要修改 slite 以插入指定位置的方式。
  • 看到 jQuery (inArray) 和本机方法 (indexOf) 的混合让我的眼睛受伤了……

标签: javascript jquery arrays multidimensional-array


【解决方案1】:

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

虽然有一些优化的地方:

  • 不要使用$.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,因为它们大多会增加开销。

【讨论】:

    【解决方案2】:

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

    假设myArray 是顶级数组

    【讨论】:

    • 问题是,元素的位置可能不同。
    猜你喜欢
    • 2014-04-05
    • 1970-01-01
    • 2019-12-08
    • 1970-01-01
    • 2018-01-04
    • 2015-04-11
    • 2019-10-18
    • 2018-06-28
    相关资源
    最近更新 更多