交错两个阵列



我的逻辑是,当arrA和arrB不为空时,我想运行循环。那么,为什么在[a,b,c]和[1,2,3,4]上的输入会失败呢?

function combineArrays(arrA, arrB) {
let combined = [];
while (arrA.length != 0 && arrB.length != 0) {
if (arrA.length != 0) {
combined.push(arrA.shift());
}
if (arrB.length != 0) {
combined.push(arrB.shift());
}
}
return combined;

在这种情况下,应该使用||而不是&&arrA.length != 0 && arrB.length != 0

function combineArrays(arrA, arrB) {
let combined = [];
while (arrA.length != 0 || arrB.length != 0) {
if (arrA.length != 0) {
combined.push(arrA.shift());
}
if (arrB.length != 0) {
combined.push(arrB.shift());
}
}
return combined;
}
console.log(combineArrays(['a','b','c'], [1,2,3,4]));

您的问题将通过以下代码片段中的Or运算符来解决。

但如果你想连接数组,数组连接可能对你有用。

console.log([1,2,3].concat(["a","b","c"]))

function combineArrays(arrA, arrB) {
let combined = [];
while (arrA.length != 0 || arrB.length != 0) {
if (arrA.length != 0) {
combined.push(arrA.shift());
}
if (arrB.length != 0) {
combined.push(arrB.shift());
}
}
return combined;
}
console.log(combineArrays([1,2,3], ["a","b","c"]))

更好的方法使用更短的长度并迭代索引,并保持给定数组的完整性。

function combineArrays(arrA, arrB) {
let combined = [],
i = 0,
l = Math.min(arrA.length, arrB.length);
while (i < l) {
combined.push(arrA[i], arrB[i]);
i++;
}
combined.push(...arrA.slice(i), ...arrB.slice(i));
return combined;
}
console.log(combineArrays(['a', 'b', 'c'], [1, 2, 3, 4]));

值零等于false-->布尔值(0(===false(否则为true(

所以:

function combineArrays(arrA, arrB)
{
let combined = [];
while (arrA.length || arrB.length)
{
if (arrA.length) combined.push(arrA.shift()) 
if (arrB.length) combined.push(arrB.shift())
}
return combined;
}
console.log( combineArrays(['a','b','c'], [1,2,3,4]))

你也可以做

function combineArrays(arrA, arrB)
{
let combined = [], iMax = Math.max(arrA.length,arrB.length)
for (let i=0; i<iMax; ++i)
{
if (i<arrA.length) combined.push(arrA[i]) 
if (i<arrB.length) combined.push(arrB[i])
}
return combined.filter(Boolean)
}

console.log( combineArrays(['a','b','c'], [1,2,3,4]))

或者:

function combineArrays(arrA, arrB)
{
let combined = [], i = 0;
for(let a of arrA) { combined[i++] = a; ++i  }
i=1
for(let b of arrB) { combined[i++] = b; ++i  }
return combined.filter(Boolean)
}
console.log( combineArrays(['a','b','c'], [1,2,3,4]))

或者再次(有点扭曲(

function combineArrays(arrA, arrB)
{
let combined = [...arrA,...arrB ]
, iMin     = Math.min(arrA.length,arrB.length) *2
, j        = arrA.length
;
for (let i=1; i<iMin; i+=2)
{
combined.splice(i,0,combined.splice(j++,1)[0] )
}
return combined
}
console.log( combineArrays(['a','b','c'], [1,2,3,4]))

对于第4次迭代,arrA.长度将为0,因此while循环将因AND条件而终止。使用||而不是&amp;在while循环中。

最新更新