我的逻辑是,当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条件而终止。使用||而不是&;在while循环中。