文档章节

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

o
 osc_w9s1w4o0
发布于 2019/03/31 18:06
字数 439
阅读 5
收藏 0

精选30+云产品,助力企业轻松上云!>>>

一、问题描述:

将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/

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
前端笔记之React(六)ES6的Set和Map&immutable和Ramda和lodash&redux-thunk

一、ES6的Set、Map数据结构 Map、Set都是ES6新的数据结构,都是新的内置构造函数,也就是说typeof的结果,多了两个: Set 是不能重复的数组 Map 是可以任何东西当做键的对象 ES6 提供了新的数...

osc_nnbkiac5
2019/08/02
5
0
js课程 3-10 js中字符串函数数组函数和其它语言中对应函数的区别和联系是什么

js课程 3-10 js中字符串函数数组函数和其它语言中对应函数的区别和联系是什么 一、总结 一句话总结:js中是对象点方法的形式,这些方法都是对象的方法,而在php、java中却不是这样。 1、js字...

osc_adpilc97
2018/07/09
13
0
键盘录入6个int类型的数据存入数组arr中,将arr数组中的内容反转...

一、有一道很有意思的数组操作相关编程题,闲来无事用JS解决了一下,问题描述如下: (1) 键盘录入6个int类型的数据存入数组arr中; (2) 将arr数组中的内容反转; (3) 将反转后的数组角标为奇...

osc_c0qub4nv
2019/03/31
2
0
【干货】js 数组详细操作方法及解析合集

前言 在开发中,数组的使用场景非常多,平日中也涉及到很多数组的/相关操作,一直也没有对这块内容进行一块整理总结,很多时候就算用过几次这个,在开发中也很容易忘记,还是要谷歌一下。所以...

大灰狼的小绵羊哥哥
2019/04/07
0
0
【干货】js 数组详细操作方法及解析合集

前言 在开发中,数组的使用场景非常多,平日中也涉及到很多数组的/相关操作,一直也没有对这块内容进行一块整理总结,很多时候就算用过几次这个,在开发中也很容易忘记,还是要谷歌一下。所以...

OBKoro1
2018/10/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Cloud开发人员如何解决服务冲突和实例乱窜?(IP实现方案)

点击上方“陶陶技术笔记”关注我 回复“资料”获取作者整理的大量学习资料! 一、背景 在我上一篇文章《Spring Cloud开发人员如何解决服务冲突和实例乱窜?》中提到使用服务的元数据来实现隔...

zlt2000
2019/09/06
0
0
Linux下diff命令用法详解

大家好,我是良许。 我们在平时工作的时候,经常要知道两个文件之间,以及同个文件不同版本之间有何异同点。在 Windows 下,有 beyond compare 这个好用的工具,而在 Linux 下,也有很多很强...

osc_th8jvcw7
23分钟前
7
0
万变不离其宗之UART要点总结

[导读] 单片机开发串口是应用最为广泛的通信接口,也是最为简单的通信接口之一,但是其中的一些要点你是否明了呢?来看看本人对串口的一些总结,当然这个总结并不能面面俱到,只是将个人认为...

osc_kyehmyzk
24分钟前
7
0
kafka的认识、安装与配置

认识Kafka 花费越少的精力在数据移动上,就能越专注于核心业务 --- 《Kafka:The Definitive Guide》 认识 Kafka 之前,先了解一下发布与订阅消息系统:消息的发送者不会直接把消息发送给接收...

osc_wy8nhxhn
26分钟前
0
0
使用pandas进行数据处理——DataFrame篇

  今天是pandas数据处理专题的第二篇文章,我们一起来聊聊pandas当中最重要的数据结构——DataFrame。   上一篇文章当中我们介绍了Series的用法,也提到了Series相当于一个一维的数组,只...

开源仔
26分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部