我有一个多维数组
[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');
}
});
但是,我很确定,这是一个次优解决方案,并且有一种更简单(也更有效)的方法来实现这一目标。
也许,我只是觉得太复杂了。
答案 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
是顶级数组