如何在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 相关文章推荐
一个符号插入器 中用到的js代码
Sep 04 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
Dec 11 Javascript
使用jQuery validate 验证注册表单实例演示
Mar 25 Javascript
Javascript弹出窗口的各种方法总结
Nov 11 Javascript
JSON字符串和对象之间的转换详解
May 26 Javascript
javascript中caller和callee详解
Aug 10 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
Dec 20 Javascript
BootStrap智能表单实战系列(九)表单图片上传的支持
Jun 13 Javascript
AngularJs 国际化(I18n/L10n)详解
Sep 01 Javascript
Angular4表单验证代码详解
Sep 03 Javascript
基于JS实现前端压缩上传图片的实例代码
May 14 Javascript
js实现简易计算器功能
Oct 18 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
Amazon Prime Video平台《无限住人 -IMMORTAL-》2020年开始TV放送!
2020/03/06 日漫
php解析html类库simple_html_dom(详细介绍)
2013/07/05 PHP
浅析get与post的一些特殊情况
2014/07/28 PHP
PHP实现文件上传和多文件上传
2015/12/24 PHP
Yii2使用表单上传文件的实例代码
2017/08/03 PHP
phpStudy2016 配置多个域名期间遇到的问题小结
2017/10/19 PHP
jQuery实现仿腾讯微博滑出效果报告每日天气的方法
2015/05/11 Javascript
基于javascript实现单选及多选的向右和向左移动实例
2015/07/25 Javascript
javascript正则表达式总结
2016/02/29 Javascript
javascript创建对象、对象继承的实用方式详解
2016/03/08 Javascript
BootStrapTable服务器分页实例解析
2016/12/20 Javascript
js实现图片粘贴上传到服务器并展示的实例
2017/11/08 Javascript
layer实现关闭弹出层刷新父界面功能详解
2017/11/15 Javascript
Webpack之tree-starking 解析
2018/09/11 Javascript
vue2 拖动排序 vuedraggable组件的实现
2019/08/08 Javascript
Angular+Ionic使用queryParams实现跳转页传值的方法
2020/09/05 Javascript
python虚拟环境virtualenv的使用教程
2017/10/20 Python
Python实现将HTML转成PDF的方法分析
2019/05/04 Python
浅析Python与Mongodb数据库之间的操作方法
2019/07/01 Python
pymysql 开启调试模式的实现
2019/09/24 Python
django在保存图像的同时压缩图像示例代码详解
2020/02/11 Python
django model object序列化实例
2020/03/13 Python
详解canvas.toDataURL()报错的解决方案全都在这了
2020/03/31 HTML / CSS
去加拿大的旅行和假期:Canadian Affair
2016/10/25 全球购物
TripAdvisor台湾:全球最大旅游网站
2018/08/26 全球购物
澳大利亚在线家具店:Luxo Living
2019/03/24 全球购物
ddl,dml和dcl的含义
2016/05/08 面试题
经典的班主任推荐信
2013/10/28 职场文书
就业自荐书
2013/12/05 职场文书
质检员岗位职责
2013/12/17 职场文书
计算机学生求职信范文
2014/01/30 职场文书
出纳员岗位职责风险
2014/03/06 职场文书
篝火晚会主持词
2014/03/25 职场文书
辩护词格式
2015/05/22 职场文书
保安辞职申请书应该怎么写?
2019/07/15 职场文书
【超详细】八大排序算法的各项比较以及各自特点
2021/03/31 Python