我有点好奇为什么下面发布的两个解决方案之间的行为不同。在Failing解决方案中,我已将 zeros 数组连接到我在执行时假设的值,即过滤操作的结果数组。我很好奇为什么结果不是更新的连接变体(末尾为 0 的数组),而只是过滤操作的初始输出。通过:const moveZeros = function (arr) { let zeros = []; for (let i = 0; i < arr.length; i++) { if (arr[i] === 0) zeros.push(0); } let filteredArray = arr.filter( element => element !== 0).concat(zeros) return filteredArray; //returns [1,2,3,0,0,0]}失败:const moveZeros = function (arr) { let zeros = []; for (let i = 0; i < arr.length; i++) { if (arr[i] === 0) zeros.push(0); } let filteredArray = arr.filter( element => element !== 0); // shouldnt the line below concat zeros to the filter result? filteredArray.concat(zeros); return filteredArray; //returns [1,2,3]}这也通过: return filteredArray.concat(zeros)
3 回答
月关宝盒
TA贡献1772条经验 获得超5个赞
Array.concat() 返回连接的数组而不是原始数组。
let arr = [1,0,0,2,3,0];
let zeros = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] === 0) zeros.push(0);
}
let filteredArray = arr.filter( element => element !== 0);
console.log(filteredArray);
let concatenatedArray = filteredArray.concat(zeros);
console.log(concatenatedArray);
所以你需要重新分配filteredArray如下:
filteredArray = filteredArray.concat(zeros);
添加回答
举报
0/150
提交
取消