与另一个数组相比,填充数组

时间:2017-07-10 17:32:32

标签: javascript arrays

我有这两个数组

var array1 = [{
  id: "Test1",
  value: "Beep"
}, {
  id: "Test2",
  value: "Meep"
}, {
  id: "Test3",
  value: "Sheep"
}];

var array2 = [{
    id: "Test2"
  }, {
    id: "Test3"
  }],
  stuff2: [{
    id: "Test1"
  }, {
    id: "Test3"
  }],
  stuff3: [{
    id: "Test3"
  }];

我正在寻找一种方法来插入空对象或null到第二个数组,以便第二个数组看起来像这样:

var array2 = [null, {
    id: "Test2"
  }, {
    id: "Test3"
  }],
  stuff2: [{
    id: "Test1"
  }, null, {
    id: "Test3"
  }],
  stuff3: [
    null, null, {
      id: "Test3"
    }
  ];

这不能是ES6,因为我正在处理它的代码库相当陈旧(AngularJS 1.4)。

我无法绕过这一个。欢迎任何帮助。

1 个答案:

答案 0 :(得分:1)

我正在对你实际想要完成的事情做出一些假设(根据你的输入和所需的输出)。我们的想法是,对于包含对象中的每个键(您调用它们的数组),检查stuffstuff2等数组中每个元素的id是否等于对象的数组+ 1中的索引(即stuff[0].id === "Test1")。如果不是这种情况,请将null插入该位置的数组并向前移动。它看起来如下:



var array2 = {
  stuff: [{
    id: "Test2"
  }, {
    id: "Test3"
  }],
  stuff2: [{
    id: "Test1"
  }, {
    id: "Test3"
  }],
  stuff3: [{
    id: "Test3"
  }]
};

function fillGaps(obj) {
    var keys = Object.keys(obj);
    keys.forEach(function (key) {
        var arr = obj[key];
        for(var i = 0; i < arr.length; i++) {
            var id = arr[i].id;
            if (id !== "Test" + (i+1)) {
                arr.splice(i, 0, null);
            }
        }
    });
    return obj;
}
console.log(fillGaps(array2));
&#13;
&#13;
&#13;