将0移到最后,在原数组操作,并且不能改变源数据顺序(JS编程)


一、问题描述:

将0移到最后,在原数组操作,并且不能改变源数据顺序。

示例:输入:[2,0,0,1,0,3],  结果:[2,1,3,0,0,0]

 

二、问题分析与解决:

注意是在原数组上操作,不要进行任何数组拷贝操作,还要保证操作后的源数据顺序不变。

直接上JS代码:

//ES6箭头函数写法
const moveZero = (arr) => {
  let y = 0;//定义y用于控制循环结束
  for (let i = 0; y < arr.length; y++) {
    if (arr[i] === 0) arr.push(arr.splice(i, 1)[0]);//循环到是0的位置就删除该元素0并且在arr末尾push进这个元素0,由于splice删除了该位置元素,所以i不用+1,下次循环仍然检查i位置的元素
    else i++;//循环到不是0的位置就继续往后循环
  }
  return arr;//返回操作后的原数组
};

//运行如下:
moveZero([2,0,0,1,0,3]);//[2,1,3,0,0,0]

注: 细节之处体现差别,Array.prototype.splice(startIndex, counts, addElement)方法的作用和三个参数的含义尽人皆知。但是很少有人关心它的返回值,splice的返回值是原数组中被删除的元素组成的数组,如[1,2,3].splice(1,2)返回被删除的元素数组[2,3],利用这一点可以将代码简化,即arr.push(arr.splice(i, 1)[0]),直接将删除后的元素push进原数组。顺便提一下push方法返回的是push操作之后,原数组的length属性,如[].push(1,2,3)返回数字3,即push后数组[1,2,3]的length为3.

 

如有疑问欢迎留言讨论,谢谢!

(本文为原创博客,严禁非法抄袭或复制,转载请注明出处:https://www.cnblogs.com/xiao-pengyou/

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM