Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在多维数组中的特定索引处向数组插入多个项?_Javascript_Arrays_Node.js - Fatal编程技术网

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表示努力:)