JS 数组添加元素、删除元素、数组去重
文章目录
- 一、往数组中添加元素
- 1.array.push()
- 2.array.unshift()
- 3.array.splice()
- 4.扩展运算符
- 5.array.concat()
- 二、删除数组中某个/些元素
- 1.array.splice()
- 2.array.slice()
- 3.array.pop()
- 4.array.shift()
- 5.filter过滤器
- 三、数组去重
- 1.扩展运算符+Set
- 2.indexOf
- 3.sort
- 4.includes
- 5.双循环(for、forEach、map)+splice
一、往数组中添加元素
1.array.push()
push()方法会在数组尾部添加新元素,该方法会直接修改原数组。
let arr = [1,2];
arr.push(3); // [1,2,3]
arr.push(4,5); // [1,2,3,4,5]
2.array.unshift()
unshift()往数组头部添加新元素,该方法同样也会修改原数组。
let arr = [1,2];
arr.unshift(3); // [3,1,2]
arr.unshift(4,5); // [4,5,3,1,2]
3.array.splice()
slipce()方法可以在数组指定位置添加元素或者删除元素,它会修改原数组。
let arr = [1,2];
arr.splice(2,0,3); // [1,2,3]
// 第一个参数代表数组索引2,第二个参数是删除元素的数量(0就是删除0个),第三个参数是添加的元素
arr.unshift(4,5); // [4,5,3,1,2]
4.扩展运算符
扩展运算符不仅能往数组中添加元素,还可以合并数组、将数组转为用逗号分割的参数序列、将类数组或者可遍历对象转为真实数组等。但扩展运算符不会修改原数组,它会将其结合生成一个新数组。
let arr = [1,2];
let brr = [...arr,3,4]; //[1,2,3,4] 添加元素
let crr = [5,6];
brr.push(...crr); //[1,2,3,4,5,6] 合并数组
let a = "ying";
console.log([...a]); // ['y', 'i', 'n', 'g'] 将字符串转为数组
5.array.concat()
concat()连接两个数组,也可用于数组添加元素,它不会改变原数组。
let arr = [1,2];
arr.concat(3); // [1,2,3]
arr.concat(4,5); // [1,2,3,4,5]
arr.concat([6,7]); // [1,2,3,4,5,6,7]
二、删除数组中某个/些元素
1.array.splice()
如果splice()方法删除元素只需前两个参数,第一个参数代表想要删除的元素索引,第二个参数则是需要删除元素的数量,如果没有第二个参数,则会删除元素索引后的所有元素。
let arr = [1,2,3,4,5];
arr.splice(3,1); // [1,2,3,5]
arr.splice(1); // [1]
利用条件循环和splice()方法去删除数组中元素,需要注意:
在需要同时删除多个元素时,会发现splice只删除了第一个。
这是因为:splice()会修改原数组,在删除符合条件的第一个元素后,后面的元素索引就会往前移一个,元素索引都被改变了,之前找出的符合条件的索引无法对应上,所以删除不了。
解决方法就是每次在splice()删除一个元素之后,将循环项的i值减一,对应上删除元素后的数组索引即可。
for (let i = 0; i < data.length; i++) {if (data[i].startTime === null || data[i].endTime === null) {data.splice(i, 1);i--; //在每次splice删除一项元素之后,i减一,对应改变后的数组索引}
}
2.array.slice()
slice()方法可在数组中截取元素,它返回一个新数组,不会改变原数组。第一个参数是截取开始的数组索引位置(包含此索引的元素),第二个参数是截取结束的位置(不包含此索引的元素)。
let arr = [1,2,3,4,5];
arr.slice(1,3); // [2,3]
arr.slice(-4,-1); //[2,3,4]
//参数是负数,表示从数组倒数第四个元素(包含)至倒数第一个元素(不包含)截取
3.array.pop()
pop()方法删除数组最后一个元素,会改变原数组。
let arr = [1,2,3];
arr.pop(); // [1,2]
4.array.shift()
shift()方法删除数组第一个元素,会改变原数组。
let arr = [1,2,3];
arr.shift(); // [2,3]
5.filter过滤器
过滤器从数组中筛选出符合条件的元素,不会改变原数组。
let arr = [1,2,3,4,5];
arr = arr.filter(item => item != 2) //[1,3,4,5]
三、数组去重
数组去重不仅是一道经典面试题,在工作中也能经常遇到,我总结出了几种比较常用的方法。
1.扩展运算符+Set
Set方法的特性就是相同的数据只会保留一个,刚好达到去重的目的,但Set方法返回的不是真实数组,就需要用扩展运算符将其转化为真实数组。
let arr = [1,5,3,2,4,2,4,1,6,7];function handleArr(arr) {return ([...new Set(arr)])
}console.log(handleArr(arr));
2.indexOf
indexOf()检索数组中是否含有某个元素,如果有就返回元素下标(索引),如果没有则返回-1。利用其特性可以新建一个空数组去检索去重数组,如果返回-1,就把元素加进新数组,达到去重。
let arr = [4,5,3,8,4,1,2,5,8];function handleArr(arr) {let brr = [];for (let i = 0;i<arr.length;i++) {if (brr.indexOf(arr[i]) === -1) {brr.push(arr[i]);}else {}}return brr
}console.log(handleArr(arr));
3.sort
sort()可以对数组元素进行排序,排序之后通过对比相邻元素来去重。
let arr = [9,2,1,5,3,7,4,2,8,7,4];function handleArr(arr) {arr.sort();let brr = [];for (let i = 0;i<arr.length;i++) {if (arr[i] !== arr[i-1]) {brr.push(arr[i]);}else {}}return brr
}console.log(handleArr(arr));
(强迫症福音* v *)
4.includes
includes() 方法用于判断字符串是否包含指定的子字符串,如果有则返回true,无则返回false。去重原理和indexOf一样。
let arr = [3,1,3,2,5,1,6,5]; function handleArr(arr) {let brr = [];for (let i = 0;i<arr.length;i++) {if (!brr.includes(arr[i])) {brr.push(arr[i]);}else {}}return brr
}console.log(handleArr(arr));
5.双循环(for、forEach、map)+splice
利用循环比较选出重复元素,splice删除该元素。这个方法也可以用于多个数组比较去重。
let arr = [1,4,2,8,5,2,4,1,7]; function handleArr(arr) {for (let i = 0;i<arr.length;i++) {for (let y = i+1;y<arr.length;y++) {if (arr[i] === arr[y]) {arr.splice(y,1);y--; //对应上文的splice删除元素的注意事项}}}return arr
}console.log(handleArr(arr));
这里的循环还可以用到map和forEach,原理是一样的。
JS 数组添加元素、删除元素、数组去重相关推荐
- php 从数组里删除元素,PHP从数组中删除元素的四种方法实例
PHP从数组中删除元素的四种方法实例 一.总结 一句话总结:unset(),array_splice(),array_diff(),array_diff_key() 二.PHP从数组中删除元素的四种方 ...
- 从PHP中的数组中删除元素
有没有一种简单的方法可以使用PHP从数组中删除元素,以便foreach ($array)不再包含该元素? 我认为将其设置为null可以做到,但是显然不起作用. #1楼 如果您有一个数字索引的数组,其中 ...
- php unset函数_PHP | 使用unset()函数从数组中删除元素
php unset函数 Given an array and we have to remove an element from the array. 给定一个数组,我们必须从数组中删除一个元素. u ...
- java从数组中删除元素(数组的缩容)
java从数组中删除元素(数组的缩容) 1,解决方案一 /* * 数组的缩容(删除元素) * 第一种解决方案 * 移动元素,被删除元素后面的元素往前移一位 * 优点:不需要创建新数组,省内存,速度快 ...
- Delphi动态数组中删除元素的重要函数Delete
System.Delete从字符串中删除一个子串,或者从动态数组中删除元素,并返回修改后的数组. 在Delphi代码中,Delete从字符串或数组S中删除一个由Count字符组成的子串,从S[Inde ...
- java数组中删除元素或一个数组元素
java数组中删除元素或一个数组元素 删除数组中单个元素 删除数组中多个元素(数组表示) 这里直接介绍两种情况: 1.删除数组中单个元素 2.删除数组中多个元素(数组表示) 删除数组中单个元素 1. ...
- MongoDB 学习笔记之 从数组中删除元素和指定数组位置
从数组中删除元素: 从数组中删除单个元素: db.ArrayTest.updateOne({ "name" : "Bill"},{$pop: {"ad ...
- java 中数组中删除元素_java数组中删除元素的操作
我们在学习数组的开始,就明确过初始的长度是不可变化的.但是在实际的使用中,难免会涉及到对数组的改动.本篇我们带来的是在数组中删除元素的方法:remove和索引.相信这两种概念大家都不陌生,那么结合了数 ...
- php 删除最后一个空数组,php删除空数组
php 删除空数组$fangId = PostGet('houseId'); // 取得地址栏值 $tempArray = array_filter(explode('_',$fangId),&quo ...
- js添加和删除元素节点
js添加和删除元素节点 <!DOCTYPE html> <html> <head><meta charset="UTF-8">< ...
最新文章
- c语言考试经典编程题目及答案,经典练习C语言编程的题目及答案整理
- node--静态服务器
- FJ省队集训DAY5 T1
- Ubuntu Linux配置IP地址
- chcon和semanage fcontext的坑
- $.ajax data怎么处理_AJAX
- curd日志记录php,ThinkPHP学习之CURD操作(一)
- 光驱安装centos7系统过程_centos7可以ping通外网_可以ping通内网其他机器_但是其他机器就是ping不通centos7_太神奇了---linux工作笔记041
- Cisco AP-Sniffer模式空口抓包
- WorkerMan源码分析 - 实现最简单的原型
- 大话存储系列21——存储系统内部IO 上
- ALOS 12.5米精度DEM数据下载与处理
- jQuery实现点击复制文本效果
- 图解 FAT 文件系统之基础知识(一)
- 如何在Microsoft Excel电子表格之间交叉引用单元格
- Shell 的加减乘除
- 计算机网络启动慢,电脑开机后网络连接图标出现的太慢了,2分钟才能出现,不出现什么都做不了,怎么办?如果手动设置...
- 如何用ssh隧道绕过防火墙
- 鸿蒙系统用的什么代码,鸿蒙系统是用什么语言开发的?
- 基于单片机万用表量程手动自动电阻电流电压设计-全套资料
热门文章
- 项目分享:模拟博客园登录
- 浅析安科瑞能耗监测云平台在公共建筑上的应用及未来发展趋势
- 优秀的HDR渲染软件:Topaz Adjust AI for Mac
- Java学习之子类(八):abstract类和abstract方法
- 如何理解文件权限设置 —— 644 755 777 等
- 办公软件转型SaaS安全与赢利待探索
- java毕业设计基于Bootstrap框架的读书网站设计与实现mybatis+源码+调试部署+系统+数据库+lw
- UEFI + GPT双硬盘安装win10和Ubuntu16.04双系统
- Android Studio Database Inspetor 无法正常显示数据库
- 白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(4):K临近