zoukankan      html  css  js  c++  java
  • 将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/

    知识在于分享,如有问题欢迎评论! 原创博客禁止抄袭,原文地址:https://www.cnblogs.com/xiao-pengyou/
  • 相关阅读:
    perl中shift 和unshift 操作
    Perl 关于 use strict 的用法
    Windows7鼠标右键里没有新建文本文件的选项,解决办法
    大唐笔试题
    常用的设计模式
    优化C++程序编译效率的一些方法
    TCP连接,传输数据时的粘包问题讨论
    单链表是否有环及环入口点
    构造函数和析构函数能否声明为虚函数?
    azkaban 执行hive语句
  • 原文地址:https://www.cnblogs.com/journey-blog/p/10632378.html
Copyright © 2011-2022 走看看