Javascript 如何在多维数组中的特定索引处向数组插入多个项?
我有一个数组Javascript 如何在多维数组中的特定索引处向数组插入多个项?,javascript,arrays,node.js,Javascript,Arrays,Node.js,我有一个数组 var arr = [[1,2,3,4,5],[2,3,4,5,6],[3,4,5,6,7],[4,5,6,7,8],[5,6,7,8,9], [6,7,8,9,10], [7,8,9,10,11]]; 我想在特定索引处的多个项目前后添加一个新项目 我想要实现的是: var new_arr = [["x",1,"x",2,3,4,5], [2,3,4,5,"x",6,"x"], [3,4,5,"x",6,"x",7], [4,5,"x",6,"x",7,8], [5,"x",6,
var arr = [[1,2,3,4,5],[2,3,4,5,6],[3,4,5,6,7],[4,5,6,7,8],[5,6,7,8,9], [6,7,8,9,10], [7,8,9,10,11]];
我想在特定索引处的多个项目前后添加一个新项目
我想要实现的是:
var new_arr = [["x",1,"x",2,3,4,5], [2,3,4,5,"x",6,"x"], [3,4,5,"x",6,"x",7], [4,5,"x",6,"x",7,8], [5,"x",6,"x",7,8,9], ["x",6,"x",7,8,9,10], [7,8,9,10,11]];
问题是,当我使用splice
在迭代数组中插入新项时,索引确实会发生变化。因为拼接是一种破坏性功能
以下是我尝试过的:
var result = [];
_.each(arr, function(item, index) {
index_a = item.indexOf(1);
index_b = item.indexOf(6);
var temp_item = item.slice(0);
if(~index_a || ~index_b) {
temp_item.splice(index, 0, "x");
temp_item.splice(index + 2, 0, "x");
if(index_b > -1) {
temp_item.splice(index, 0, "x");
}
}
result.push(item);
}
在上述迭代过程中,第一个拼接
工作正常。但是第二个“x”
没有正确放置。我认为原因首先是splice
s对temp\u项的影响。因为数组中的项目数正在更改
那么我怎样才能实现我想要的呢?谢谢。你能先加上第二个吗?这不会改变第一个的索引。你能先添加第二个吗?这不会改变第一个的索引。我想这就是你想要的。首先拼接较高的索引可保持较低的索引位置
function padArr(val, arr){
arr.forEach(function(subArr){
var idx = subArr.indexOf(val);
if( idx >-1){
subArr.splice(idx+1,0,'x' );
subArr.splice(idx,0,'x')
}
});
return arr;
}
// usage
arr = padArr(1, arr);
arr = padArr(6, arr);
我想这正是你想要的。首先拼接较高的索引可保持较低的索引位置
function padArr(val, arr){
arr.forEach(function(subArr){
var idx = subArr.indexOf(val);
if( idx >-1){
subArr.splice(idx+1,0,'x' );
subArr.splice(idx,0,'x')
}
});
return arr;
}
// usage
arr = padArr(1, arr);
arr = padArr(6, arr);
我做了一些改变,但效果不错。Oriol是正确的
s的索引始终是-1
在我的解决方案中,我映射到矩阵上,并评估每一行是否包含1
或6
,是否按索引缓存元素,并将索引与“x”、
elm“x”
再举个例子我改变了一些东西,但它起作用了。Oriol是正确的
s的索引始终是-1
在我的解决方案中,我映射到矩阵上,并评估每一行是否包含1
或6
,是否按索引缓存元素,并将索引与“x”、
elm“x”
还有一个例子arr
是一个数组数组。因此,arr.indexOf(1)
和arr.indexOf(6)
将是-1
。你说得对,奥利奥:)这是我在简化问题时犯的一个错误,查看我的真实代码:)我修复了它。arr
是一个数组。因此,arr.indexOf(1)
和arr.indexOf(6)
将是-1
。你是对的,奥利奥:)这是我在简化问题时犯的一个错误,看我的真实代码:)我修正了它。我改变了主意:)主要思想是一样的,你是第一个回答的人,我改变主意了:)主要思想是一样的,你是第一个回答的人,谢谢你的回答和密码。但是helloChris是第一个玩这个把戏的人:)谢谢你的答案和密码。但是helloChris是第一个玩这个把戏的人:)谢谢你的回答+谢谢你的回答+1表示努力:)