如何将一个数组的内容迭代到另一个数组的空/未定义的位置?

时间:2015-08-25 15:09:28

标签: javascript arrays iterator

我有一个数组:

var myArray = [2, 4, 6];

和另一个数组:

var otherArray = [1, , 3, , 5, , 7];

我正在尝试映射(或使用任何非“for / for-each”迭代器)将每个myArray值放入otherArray的相应空白区域。

希望输出:

newArray = [1, 2, 3, 4, 5, 6, 7];

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

otherArray.forEach(function (val, idx) {
    if (typeof val === 'undefined') {
        otherArray[idx] = myArray.shift();
    }
});
如果支持IE< forEach可能不兼容。 9虽然。

使用Array.prototype.map

var newArray = otherArray.map(function(val) {
    return typeof val === 'undefined' ? myArray.shift() : val;
});

请注意,这不会命中从未设置过的索引。

使用while循环:

while (myArray.length > 0) {
  var emptyIdx = otherArray.indexOf();
  otherArray[emptyIdx] = myArray.shift();
}

编辑:好的,如果数组中的元素确实没有设置,就像它们在你的描述中那样,这些解决方案不会起作用,因为它们会跳过未设置的索引。这是一个可行的方法:



var myArray = [2, 4, 6, 8, 9];
var otherArray = [1, , 3, , 5, , 7];

var lastIdx = -1;
otherArray.forEach(function(val, idx) {
  if (idx - lastIdx > 1) {
    otherArray[idx - 1] = myArray.shift();
  }
});

if (myArray.length > 0) {
  otherArray = otherArray.concat(myArray);
}

document.body.innerHTML = otherArray;




答案 1 :(得分:2)

您可以遍历数组并检查未定义的值,如:



var otherArray = [1, , 3, , 5, , 7];
var myArray = [2, 4, 6];

for (var i = 0, j = 0; i < otherArray.length; i++) {
    //check if a value is undefined
    if (!otherArray[i]) {
        //then change this value with the new from other array
        otherArray[i] = myArray[j];
        j++;
    }
}
console.log(otherArray);//prints [1, 2, 3, 4, 5, 6, 7]
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您可以使用递归,此函数将使用第二个项目填充第一个数组的undefined个项目,直到它到达所使用的某个数组的末尾。

&#13;
&#13;
var otherArray = [1, , 3, , 5, , 7];
var myArray = [2, 4, 6];


function fillArray(ar1, ar2, i){
    if (!i) i = 0;

    if (!ar1[i]){
        ar1[i] = ar2.shift();
    }
    if (++i < ar1.length && ar2.length > 0){
        fillArray(ar1, ar2, i);   
    }
}


fillArray(otherArray, myArray); // this will update the content of originals arrays, 
// use otherArray.slice() to get a copy.

document.getElementById("result").innerHTML = JSON.stringify(otherArray);
&#13;
<div id="result"></div>
&#13;
&#13;
&#13;

如果您要添加元素(因为myArray中有其他项目且otherArray中没有剩余空间),您可以更改条件以继续将&&替换为{ {1}}

||