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

对数组中元素移动的一点思考。

var arr = [0,1,2,3,4,5,6];
现在想要让数组中的第四个元素,也就是3移动到1的位置。我们有很多种方法,一种最直接的方法是采用数组的内置方法splice();用splice就存在一个选择,先删除3呢还是先将3插入1的位置。现在我们不讨论先移动,我们讨论先删除的情况。

先删除3,splice方法会返回你删除的东西。现在有两个选择,你将这个删除的东西放到1的位置,或者直接将3放到1的位置。那怎么选择呢?将3直接放到1的位置,因为splice返回的值是放在数组中的,现在你想要将这个东西取出来,用toString不好,join不好,只能采用下标的方式[0]这样访问,那就太麻烦了。所以采用将3直接放到1的位置。

这样完全就没有问题了吗?是的,如果你只考虑将后面的元素放到前面那么你就成功了,可是现在我想要将3放到5的位置。此时就会想一个问题,我是先删除3,那么实际上5的位置是向前进了一位,数组长度也相当与小了1。这个时候你想要放到的位置(i)是不是已经变了呢?

的确已经变了。可是我们就要修改(i)的值吗?把i变成(i-1)?答案是不用。此时我们换一个思路来思考,我们现在不将3移动到1和5的位置,我们将3移动到2和4的位置。移动到2位置,我们是不是想要将3放到2之前呢,将数组变长[0,1,3,2,4,5,6]这样没问题吧,也就是我们想将3移动到前面元素之前。而我们将3移动到4的位置,是不是想要竟数组变成这样呢[0,1,2,4,3,5,6],也就是我们想要将3移动到后面元素之后。所以此时4正好向前面移动了一位,在不修改(i)值的前提下正好满足条件。perfect!所以其实不思考直接用就ok啦^_^。

但是如果采用先移动再删除的方法就要判断向前移动还是向后移动,所以最好的实践就是采用先删除再移动,一步搞定。

点击查看更多内容
6人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
Web前端工程师
手记
粉丝
9110
获赞与收藏
2572

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消