我有一个多维数组
[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/