如何在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如何改变html标签的样式(两种实现方法)
Jan 16 Javascript
JavaScript常用基础知识强化学习
Dec 09 Javascript
js获取url传值的方法
Dec 18 Javascript
JavaScript中解决多浏览器兼容性23个问题的快速解决方法
May 19 Javascript
微信小程序 Storage API实例详解
Oct 02 Javascript
JS实现复选框的全选和批量删除功能
Apr 05 Javascript
详解在 Angular 项目中添加 clean-blog 模板
Jul 04 Javascript
让网站自动生成章节目录索引的多个js代码
Jan 07 Javascript
原生JS实现的碰撞检测功能示例
May 18 Javascript
vuejs前后端数据交互之从后端请求数据的实例
Aug 11 Javascript
vue项目中使用bpmn为节点添加颜色的方法
Apr 30 Javascript
深入理解javascript中的this
Feb 08 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
php去除换行(回车换行)的三种方法
2014/03/26 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
PHP通过curl获取接口URL的数据方法
2018/05/31 PHP
Laravel 将数据表的数据导出,并生成seeds种子文件的方法
2019/10/09 PHP
关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
2012/07/31 Javascript
jQuery使用hide方法隐藏元素自身用法实例
2015/03/30 Javascript
window.onload与$(document).ready()的区别分析
2015/05/30 Javascript
javascript制作幻灯片(360度全景图片)
2015/07/28 Javascript
javascript实现选中复选框后相关输入框变灰不可用的方法
2015/08/11 Javascript
结合代码图文讲解JavaScript中的作用域与作用域链
2016/07/05 Javascript
JavaScript中的this引用(推荐)
2016/08/05 Javascript
VUE开发一个图片轮播的组件示例代码
2017/03/06 Javascript
javascript防篡改对象实例详解
2017/04/10 Javascript
js事件委托和事件代理案例分享
2017/07/25 Javascript
JavaScript实现多叉树的递归遍历和非递归遍历算法操作示例
2018/02/08 Javascript
React学习笔记之高阶组件应用
2018/06/02 Javascript
详解vue为什么要求组件模板只能有一个根元素
2019/07/22 Javascript
详解Vue.js 作用域、slot用法(单个slot、具名slot)
2019/10/15 Javascript
jQuery Raty星级评分插件使用方法实例分析
2019/11/25 jQuery
vue穿梭框实现上下移动
2021/01/29 Vue.js
基于并发服务器几种实现方法(总结)
2017/12/29 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
2018/01/29 Python
利用Python实现学生信息管理系统的完整实例
2020/12/30 Python
html5之Canvas路径绘图、坐标变换应用实例
2012/12/26 HTML / CSS
乐高积木玩具美国官网:LEGO Shop US
2016/09/16 全球购物
为什么要优先使用同步代码块而不是同步方法?
2013/01/30 面试题
环境工程与管理大学毕业生求职信
2013/10/02 职场文书
电子商务个人自荐信
2013/12/12 职场文书
幼儿园家长会邀请函
2014/01/15 职场文书
八年级美术教学反思
2014/02/02 职场文书
技能竞赛活动方案
2014/02/21 职场文书
岗位明星事迹材料
2014/05/18 职场文书
保安公司服务承诺书
2014/05/28 职场文书
港澳通行证委托书怎么写
2014/08/02 职场文书
2014年医生工作总结
2014/11/21 职场文书
世界十大评分最高的动漫,CLANNAD上榜,第八赚足人们眼泪
2022/03/18 日漫