如何在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 相关文章推荐
yepnope.js 异步加载资源文件
Sep 08 Javascript
jquery提交form表单简单示例分享
Mar 03 Javascript
写出高效jquery代码的19条指南
Mar 19 Javascript
js中数组排序sort方法的原理分析
Nov 20 Javascript
js检测判断日期大于多少天的方法
May 04 Javascript
JavaScript运动减速效果实例分析
Aug 04 Javascript
jquery trigger实现联动的方法
Feb 29 Javascript
详解Javascript数据类型的转换规则
Dec 12 Javascript
详解AngularJS中$filter过滤器使用(自定义过滤器)
Feb 04 Javascript
Vue-resource实现ajax请求和跨域请求示例
Feb 23 Javascript
vue实现自定义日期组件功能的实例代码
Nov 06 Javascript
原生js实现滑块区间组件
Jan 20 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
PHPWind 发帖回帖Api PHP版打包下载
2010/02/08 PHP
JavaScript 变量命名规则
2009/09/23 Javascript
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
浅谈JavaScript中Date(日期对象),Math对象
2015/02/05 Javascript
JS实现控制表格行内容垂直对齐的方法
2015/03/30 Javascript
JavaScript焦点事件、鼠标事件和滚轮事件使用详解
2016/01/15 Javascript
JS Ajax请求如何防止重复提交
2016/06/13 Javascript
jQuery实现边框动态效果的实例代码
2016/09/23 Javascript
javascript加载xml 并解析各节点的值(实现方法)
2016/10/12 Javascript
Bootstrap CSS组件之按钮下拉菜单
2016/12/17 Javascript
JavaScript数组操作详解
2017/02/04 Javascript
js常见遍历操作小结
2019/06/06 Javascript
送你43道JS面试题(收藏)
2019/06/17 Javascript
JavaScript中的几种继承方法示例
2020/12/06 Javascript
JavaScript canvas实现跟随鼠标移动小球
2021/02/09 Javascript
python实现的守护进程(Daemon)用法实例
2015/06/02 Python
python3 pillow生成简单验证码图片的示例
2017/09/19 Python
Python爬虫抓取技术的一些经验
2019/07/12 Python
浅谈django url请求与数据库连接池的共享问题
2019/08/29 Python
使用Pandas将inf, nan转化成特定的值
2019/12/19 Python
python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)
2020/04/07 Python
浅谈PyTorch中in-place operation的含义
2020/06/27 Python
Python爬虫之Selenium实现窗口截图
2020/12/04 Python
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/01/13 面试题
中年人生感言
2014/02/04 职场文书
安全生产活动月方案
2014/03/09 职场文书
2014企业领导班子四风对照检查材料思想汇报
2014/09/17 职场文书
教师党员个人自我剖析材料
2014/09/29 职场文书
论群众路线学习心得体会
2014/10/31 职场文书
高考作弊检讨书1500字
2015/02/16 职场文书
2015中秋节晚会主持词
2015/07/01 职场文书
高中生物教学反思
2016/02/20 职场文书
会议承办单位欢迎词
2019/07/09 职场文书
导游词之镇江-金山寺
2019/10/14 职场文书
python opencv旋转图片的使用方法
2021/06/04 Python
浅谈Golang 切片(slice)扩容机制的原理
2021/06/09 Golang