如何在多维数组内的特定索引处向数组插入多个项目?

时间:2015-01-22 22:53:56

标签: 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,"x",7,8,9], ["x",6,"x",7,8,9,10], [7,8,9,10,11]];

问题是,当我使用splice在迭代数组中插入新项时,索引会发生变化。因为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);
}

在上面的迭代中,第一个splice工作正常。但第二个"x"未正确放置。我认为原因是对splice数组的第一个temp_item s'影响。因为数组中的项目数正在变化。

那么我怎样才能实现我的目标呢?谢谢。

3 个答案:

答案 0 :(得分:2)

你能先加第二个吗?这不会改变第一个的索引。

答案 1 :(得分:1)

我认为这可以满足您的需求。拼接较高指数首先维持较低的指数定位

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);

DEMO

答案 2 :(得分:1)

我改变了一些事情,但它的工作。 Oriol是正确的indexOf你永远是-1

在我的解决方案中,我映射矩阵并评估每行是否包含16,如果它确实按索引缓存元素并使用"x", elm {{拼接索引1}}

"x"

也是一个jsfiddle示例