如何在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 相关文章推荐
JSONP跨域的原理解析及其实现介绍
Mar 22 Javascript
javascript制作坦克大战全纪录(2)
Nov 27 Javascript
理解js对象继承的N种模式
Jan 25 Javascript
Three.js如何实现雾化效果示例代码
Sep 27 Javascript
使用use注册Vue全局组件和全局指令的方法
Mar 08 Javascript
vue 表单输入格式化中文输入法异常问题
May 30 Javascript
支付宝小程序自定义弹窗dialog插件的实现代码
Nov 30 Javascript
基于Express框架使用POST传递Form数据
Aug 10 Javascript
JavaScript实现更换背景图片
Oct 18 Javascript
Vue中使用better-scroll实现轮播图组件
Mar 07 Javascript
nginx部署多个vue项目的方法示例
Sep 06 Javascript
Vue中foreach数组与js中遍历数组的写法说明
Jun 05 Vue.js
使用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
星际争霸秘籍
2020/03/04 星际争霸
Windows下XDebug 手工配置与使用说明
2010/07/11 PHP
Symfony2学习笔记之系统路由详解
2016/03/17 PHP
犀利的js 函数集合
2009/06/11 Javascript
JavaScript 常见对象类创建代码与优缺点分析
2009/12/07 Javascript
xheditor与validate插件冲突的解决方案
2010/04/15 Javascript
jQuery 开发者应该注意的9个错误
2012/05/03 Javascript
jQuery提交多个表单的小技巧
2014/07/27 Javascript
5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例
2015/01/29 Javascript
JS实现“隐藏与显示”功能(多种方法)
2016/11/24 Javascript
ES6中Generator与异步操作实例分析
2017/03/31 Javascript
使用proxy实现一个更优雅的vue【推荐】
2018/06/19 Javascript
Angularjs中date过滤器失效的问题及解决方法
2018/07/06 Javascript
浅谈Vue数据响应
2018/11/05 Javascript
JS基于ES6新特性async await进行异步处理操作示例
2019/02/02 Javascript
node将geojson转shp返回给前端的实现方法
2019/05/29 Javascript
微信小程序保存图片到相册权限设置
2020/04/09 Javascript
[49:35]KG vs SECRET 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python中 ? : 三元表达式的使用介绍
2013/10/09 Python
Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
2017/07/27 Python
Python 实现字符串中指定位置插入一个字符
2018/05/02 Python
Django模板导入母版继承和自定义返回Html片段过程解析
2019/09/18 Python
python实现将列表中各个值快速赋值给多个变量
2020/04/02 Python
python如何写try语句
2020/07/14 Python
CSS3 Columns分列式布局方法简介
2014/05/03 HTML / CSS
linux面试题参考答案(7)
2012/10/29 面试题
家长会学生家长演讲稿
2013/12/29 职场文书
数学兴趣小组活动总结
2014/07/08 职场文书
小学教育见习报告
2014/10/31 职场文书
优秀团支部申报材料
2014/12/26 职场文书
同学会邀请函模板
2015/01/30 职场文书
社区安全温馨提示语
2015/07/14 职场文书
会计专业自荐信范文
2019/05/22 职场文书
解决golang post文件时Content-Type出现的问题
2021/05/02 Golang
node.js如何自定义实现一个EventEmitter
2021/07/16 Javascript
angular异步验证器防抖实例详解
2022/03/31 Javascript