如何在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 21 Javascript
海量经典的jQuery插件集合
Jan 12 Javascript
c#和Javascript操作同一json对象的实现代码
Jan 17 Javascript
异步动态加载js与css文件的js代码
Sep 15 Javascript
移动端触摸滑动插件swiper使用方法详解
Aug 11 Javascript
React Native开发封装Toast与加载Loading组件示例
Sep 08 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
Apr 11 Javascript
微信小程序上线发布流程图文详解
May 06 Javascript
jQuery实现的记住帐号密码功能完整示例
Aug 03 jQuery
关于vue利用postcss-pxtorem进行移动端适配的问题
Nov 20 Javascript
jQuery实现带进度条的轮播图
Sep 13 jQuery
ES6字符串的扩展实例
Dec 21 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
dedecms系统常用术语汇总
2007/04/03 PHP
支持中文的php加密解密类代码
2011/11/27 PHP
php文字水印和php图片水印实现代码(二种加水印方法)
2013/12/25 PHP
php+ajax实现无刷新动态加载数据技术
2015/04/28 PHP
PHP封装的简单连接MongoDB类示例
2019/02/13 PHP
图片完美缩放
2006/09/07 Javascript
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
2007/12/08 Javascript
Javascript 网页黑白效果实现代码(兼容IE/FF等)
2010/04/23 Javascript
jquery操作checkbox示例分享
2014/07/21 Javascript
jquery 获取 outerHtml 包含当前节点本身的代码
2014/10/30 Javascript
IE8中动态创建script标签onload无效的解决方法
2014/12/22 Javascript
jQuery实现响应鼠标背景变化的动态菜单效果代码
2015/08/27 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
2016/05/04 Javascript
基于js里调用函数时,函数名带括号和不带括号的区别
2016/07/28 Javascript
如何利用JSHint减少JavaScript的错误
2016/08/23 Javascript
浅述节点的创建及常见功能的实现
2016/12/15 Javascript
JQuery的加载和选择器用法简单示例
2019/05/13 jQuery
vue+elementUI 复杂表单的验证、数据提交方案问题
2019/06/24 Javascript
JS实现打字游戏
2019/12/17 Javascript
微信小程序实现打卡签到页面
2020/09/21 Javascript
记录Django开发心得
2014/07/16 Python
python黑魔法之参数传递
2016/02/12 Python
Python快速查找list中相同部分的方法
2018/06/27 Python
Python3 使用cookiejar管理cookie的方法
2018/12/28 Python
详解django中Template语言
2020/02/22 Python
django 连接数据库出现1045错误的解决方式
2020/05/14 Python
django ORM之values和annotate使用详解
2020/05/19 Python
css3使网页、图片变成灰色兼容大多数浏览器
2014/07/02 HTML / CSS
CSS3中box-shadow的用法介绍
2015/07/15 HTML / CSS
HTML5中微数据概述及在搜索引擎中的使用举例
2013/02/07 HTML / CSS
四议两公开实施方案
2014/03/28 职场文书
销售督导岗位职责
2015/04/10 职场文书
基石观后感
2015/06/12 职场文书
女儿满月酒致辞
2015/07/29 职场文书
Sql Server之数据类型详解
2022/02/28 SQL Server
python_tkinter事件类型详情
2022/03/20 Python