如何在JavaScript中等分数组的实现


Posted in Javascript onDecember 13, 2020

最近开源了一个 Vue 组件,还不够完善,欢迎大家来一起完善它,也希望大家能给个 star 支持一下,谢谢各位了。

github 地址:https://github.com/qq449245884/vue-okr-tree

在本教程中,我们来学习一下如何使用Array.splice()方法将数组等分,还会讲一下,Array.splice() 和 Array.slice() 它们之间的不同之处。

1. 将数组分为两个相等的部分

我们可以分两步将数组分成两半:

使用length/2和Math.ceil()方法找到数组的中间索引

使用中间索引和Array.splice()方法获得数组等分的部分

Math.ceil() 函数返回大于或等于一个给定数字的最小整数。

const list = [1, 2, 3, 4, 5, 6];
const middleIndex = Math.ceil(list.length / 2);

const firstHalf = list.splice(0, middleIndex);  
const secondHalf = list.splice(-middleIndex);

console.log(firstHalf); // [1, 2, 3]
console.log(secondHalf); // [4, 5, 6]
console.log(list);    // []

Array.splice() 方法通过删除,替换或添加元素来更改数组的内容。 而 Array.slice() 方法会先对数组一份拷贝,在操作。

  • list.splice(0, middleIndex) 从数组的0索引处删除前3个元素,并将其返回。
  • splice(-middleIndex)从数组中删除最后3个元素并返回它。

在这两个操作结束时,由于我们已经从数组中删除了所有元素,所以原始数组是空的。

另请注意,在上述情况下,元素数为偶数,如果元素数为奇数,则前一半将有一个额外的元素。

const list = [1, 2, 3, 4, 5];
const middleIndex = Math.ceil(list.length / 2);

list.splice(0, middleIndex); // returns [1, 2, 3]
list.splice(-middleIndex);  // returns [4, 5]

2.Array.slice 和 Array.splice

有时我们并不希望改变原始数组,这个可以配合 Array.slice() 来解决这个问题:

const list = [1, 2, 3, 4, 5, 6];
const middleIndex = Math.ceil(list.length / 2);

const firstHalf = list.slice().splice(0, middleIndex);  
const secondHalf = list.slice().splice(-middleIndex);

console.log(firstHalf); // [1, 2, 3]
console.log(secondHalf); // [4, 5, 6]
console.log(list);    // [1, 2, 3, 4, 5, 6];

我们看到原始数组保持不变,因为在使用Array.slice()删除元素之前,我们使用Array.slice()复制了原始数组。

3.将数组分成三等分

const list = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const threePartIndex = Math.ceil(list.length / 3);

const thirdPart = list.splice(-threePartIndex);
const secondPart = list.splice(-threePartIndex);
const firstPart = list;   

console.log(firstPart); // [1, 2, 3]
console.log(secondPart); // [4, 5, 6]
console.log(thirdPart); // [7, 8, 9]

简单解释一下上面做了啥:

  • 首先使用st.splice(-threePartIndex)提取了ThirdPart,它删除了最后3个元素[7、8、9],此时list仅包含前6个元素[1、2、3、4、5、6] 。
  • 接着,使用list.splice(-threePartIndex)提取了第二部分,它从剩余list = [1、2、3、4、5、6](即[4、5、6])中删除了最后3个元素,list仅包含前三个元素[1、2、3],即firstPart。

4. Array.splice() 更多用法

现在,我们来看一看 Array.splice() 更多用法,这里因为我不想改变原数组,所以使用了 Array.slice(),如果智米们想改变原数组可以进行删除它。

const list = [1, 2, 3, 4, 5, 6, 7, 8, 9];

获取数组的第一个元素

list.slice().splice(0, 1) // [1]

获取数组的前5个元素

list.slice().splice(0, 5) // [1, 2, 3, 4, 5]

获取数组前5个元素之后的所有元素

list.slice().splice(5) // 6, 7, 8, 9]

获取数组的最后一个元素

list.slice().splice(-1)  // [9]

获取数组的最后三个元素

list.slice().splice(-3)  // [7, 8, 9]

到此这篇关于如何在JavaScript中等分数组的实现的文章就介绍到这了,更多相关JavaScript 等分数组内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
jQuery 使用手册(七)
Sep 23 Javascript
javascript实现类似超链接的效果
Dec 26 Javascript
jquery操作select方法汇总
Feb 05 Javascript
JavaScript对表格或元素按文本,数字或日期排序的方法
May 26 Javascript
JavaScript中setUTCMilliseconds()方法的使用详解
Jun 12 Javascript
JavaScript中的Math.SQRT1_2属性使用简介
Jun 14 Javascript
黑帽seo劫持程序,js劫持搜索引擎代码
Sep 15 Javascript
基于Phantomjs生成PDF的实现方法
Nov 07 Javascript
jQuery Position方法使用和兼容性
Aug 23 jQuery
Angular2.0实现modal对话框的方法示例
Feb 18 Javascript
Vue不能观察到数组length的变化
Jun 08 Javascript
JavaScript Event Loop相关原理解析
Jun 10 Javascript
使用Mock.js生成前端测试数据
Dec 13 #Javascript
javascript实现滚轮轮播图片
Dec 13 #Javascript
swiper实现导航滚动效果
Dec 13 #Javascript
swiperjs实现导航与tab页的联动
Dec 13 #Javascript
Vue实现简单购物车功能
Dec 13 #Vue.js
javascript前端实现多视频上传
Dec 13 #Javascript
vue使用element-ui实现表单验证
Dec 13 #Vue.js
You might like
非洲第一个咖啡超凡杯大赛承办国—卢旺达的咖啡怎么样
2021/03/03 咖啡文化
PHP中date()日期函数有关参数整理
2011/07/19 PHP
php通过前序遍历树实现无需递归的无限极分类
2015/07/10 PHP
PHP+redis实现的悲观锁机制示例
2018/06/12 PHP
php往mysql中批量插入数据实例教程
2018/12/12 PHP
PHP字符串中抽取子串操作实例分析
2019/06/22 PHP
通过js获取div的background-image属性
2013/10/15 Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
2014/11/28 Javascript
nodejs调用cmd命令实现复制目录
2015/05/04 NodeJs
js获取form的方法
2015/05/06 Javascript
JS中生成随机数的用法及相关函数
2016/01/09 Javascript
Vue-router 类似Vuex实现组件化开发的示例
2017/09/15 Javascript
详解vue中axios的封装
2018/07/18 Javascript
Vue 处理表单input单行文本框的实例代码
2019/05/09 Javascript
vue自动化路由的实现代码
2019/09/30 Javascript
微信小程序学习之自定义滚动弹窗
2020/12/20 Javascript
[01:46]辉夜杯—打造中国DOTA新格局
2015/12/25 DOTA
python读写文件操作示例程序
2013/12/02 Python
使用python编写android截屏脚本双击运行即可
2014/07/21 Python
python使用Flask框架获取用户IP地址的方法
2015/03/21 Python
pytorch + visdom CNN处理自建图片数据集的方法
2018/06/04 Python
python中的字符串内部换行方法
2018/07/19 Python
对python中的装包与解包实例详解
2019/08/24 Python
Python环境Pillow( PIL )图像处理工具使用解析
2019/09/12 Python
Django框架表单操作实例分析
2019/11/04 Python
如何基于Python + requests实现发送HTTP请求
2020/01/13 Python
Python通过2种方法输出带颜色字体
2020/03/02 Python
10种CSS3实现的loading动画,挑一个走吧?
2020/11/16 HTML / CSS
Gap工厂店:Gap Factory
2017/11/02 全球购物
教师的实习鉴定
2013/12/15 职场文书
测量工程专业求职信
2014/02/24 职场文书
中学生学雷锋演讲稿
2014/04/26 职场文书
教师反腐倡廉演讲稿
2014/09/03 职场文书
学生抄作业检讨书(2篇)
2014/10/17 职场文书
学校拾金不昧表扬信
2015/01/16 职场文书
Vue.Draggable实现交换位置
2022/04/07 Vue.js