为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我不能将数组连接到过滤器的结果?

为什么我不能将数组连接到过滤器的结果?

有只小跳蛙 2021-10-07 20:20:47
我有点好奇为什么下面发布的两个解决方案之间的行为不同。在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 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

concat()不会就地修改数组,而是返回一个新数组。您的失败版本不会返回新数组,而是返回原始数组。


查看完整回答
反对 回复 2021-10-07
?
月关宝盒

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);


查看完整回答
反对 回复 2021-10-07
?
阿晨1998

TA贡献2037条经验 获得超6个赞

来自MDN 网络文档

concat() 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。

在传递的解决方案中,您将 a 的结果分配给.concat()变量,然后返回该变量,而在失败的解决方案中,您将返回原始数组,因为您没有将结果分配filteredArray.concat(zeros)给任何东西


查看完整回答
反对 回复 2021-10-07
  • 3 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信