如何在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 相关文章推荐
[Web]防止用户复制页面内容和另存页面的方法
Feb 06 Javascript
页面右下角弹出提示框示例代码js版
Aug 02 Javascript
将form表单中的元素转换成对象的方法适用表单提交
May 02 Javascript
HTML页面登录时的JS验证方法
May 28 Javascript
利用VUE框架,实现列表分页功能示例代码
Jan 12 Javascript
jQuery实现的背景颜色渐变动画效果示例
Mar 24 jQuery
JS 正则表达式验证密码、邮箱格式的实例代码
Oct 28 Javascript
Javascript地址引用代码实例解析
Feb 25 Javascript
JavaScript创建表格的方法
Apr 13 Javascript
vue将data恢复到初始状态 && 重新渲染组件实例
Sep 04 Javascript
解决Antd Table组件表头不对齐的问题
Oct 27 Javascript
Vue项目中如何封装axios(统一管理http请求)
May 02 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
php file_get_contents抓取Gzip网页乱码的三种解决方法
2013/11/12 PHP
使用PHP把HTML生成PDF文件的几个开源项目介绍
2014/11/17 PHP
thinkphp普通查询与表达式查询实例分析
2014/11/24 PHP
JS类中定义原型方法的两种实现的区别
2007/03/08 Javascript
有道JavaScript监听浏览器的问题
2010/06/23 Javascript
js函数名与form表单元素同名冲突的问题
2014/03/07 Javascript
JavaScript中跨域调用Flash的方法
2014/08/11 Javascript
jQuery中on()方法用法实例
2015/01/19 Javascript
微信小程序 实现tabs选项卡效果实例代码
2016/10/31 Javascript
Bootstrap基本组件学习笔记之面板(14)
2016/12/08 Javascript
Vue中使用vue-i18插件实现多语言切换功能
2018/04/25 Javascript
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
2018/05/14 Javascript
几个你不知道的技巧助你写出更优雅的vue.js代码
2018/06/11 Javascript
Node.js之readline模块的使用详解
2019/03/25 Javascript
Koa从零搭建到Api实现项目的搭建方法
2019/07/30 Javascript
jQuery实现的记住帐号密码功能完整示例
2019/08/03 jQuery
原生js拖拽实现图形伸缩效果
2020/02/10 Javascript
[09:59]DOTA2-DPC中国联赛2月7日Recap集锦
2021/03/11 DOTA
Python实现提取谷歌音乐搜索结果的方法
2015/07/10 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
2018/11/07 Python
python实现抽奖小程序
2020/04/15 Python
Python 为什么推荐蛇形命名法原因浅析
2020/06/18 Python
Python如何读写字节数据
2020/08/05 Python
css3 条纹化和透明化表格Firefox下测试成功
2014/04/15 HTML / CSS
屈臣氏官方旗舰店:亚洲享负盛名的保健及美妆零售商
2019/03/15 全球购物
Omio英国:搜索并比较便宜的巴士、火车和飞机
2019/08/27 全球购物
大学毕业感言
2014/01/10 职场文书
工艺员岗位职责
2014/02/11 职场文书
车间机修工岗位职责
2014/02/28 职场文书
党的群众路线教育实践活动个人对照检查材料(乡镇)
2014/11/05 职场文书
小学生差生评语
2014/12/29 职场文书
2015年财政局工作总结
2015/05/21 职场文书
辩护意见书
2015/06/04 职场文书
消防宣传语大全
2015/07/13 职场文书
mysql 生成连续日期及变量赋值
2022/03/20 MySQL
ant design vue的form表单取值方法
2022/06/01 Vue.js