数组常用方法
会改变原始数组
- push() 向数组的末尾追加数据, 返回值:数组最新的
- pop() 删除数组的最后一个数据,返回值:被删除的数据
- unshift() 从数组最前面插入一个数据 返回值:数组最新
- shifit() 从数组最前面删除一个数据 返回值:被删除的数组
- reverse() 反转数组 返回值:反转后的数组 原先数组倒过来
- sort() 排序,把每一个数据一位一位的看待进行排序,返回值:排序后的数组
数组.sort(funciton(a,b){return a-b}) 所有数据升序排序
数组.sort(funciton(a,b){return b-a}) 所有数据降序排序 - splice() 截取数组并选择性是否插入内容
=>数组.splice(开始索引,多少个)
=>数组.splice(开始索引,多少个,要插入的数据)
+从哪一个索引开始删除,从哪一个索引开始插入
返回值:必然是一个新的数组
你截取了多少内容,新数组里面就有多少内容
如果没有截取内容,那么就是一个空的新数组
不会改变原始数组,以返回值的形式给到结果
-
concat() 进行数组拼接 返回值:拼接好的数组
-
join() 使用连接符把数组内的每一项连接成为一个字符串
返回值:连接好的字符串
注意:不会改变原始数组,返回值是一个字符串类型
连接符如果不写,默认为,连接
[1,2,3].join("-") // 1-2-3 -
slice() 数组.slice(开始索引,结束索引)
=》开始索引:默认值为0
=》结束索引:默认值是length
特点:包前不包后,可以填写负整数,当你填写负整数的 时候,等价于负整数+length
作用:截取数组,从数组内复制一些内容出来
注意:不会改变原始数组, -
indexOf() 数组.indexOf(数据,开始索引)
=》开始索引选填,默认值是0
作用:从开始索引向后检索改数组中是否有该数据
返回值:如果检索到了,那么就是该数据第一次出现的索引位置
如果没有检索到该数据,那么就是-1 -
lastIndexOf() 数组.lastIndexOf(数据,开始索引)
=》开始索引选填,默认值是length
作用:从开始索引向前检索改数组中是否有该数据
返回值:如果检索到了,那么就是该数据第一次出现的索引位置
如果没有检索到该数据,那么就是-1复杂些
-
forEach() 没有返回值 遍历数组
=》第一个参数:表示数组的每一项
=》第二个参数:索引
=》第三个参数:原数组 -
map 映射数组
=》返回是一个新数组,并且和原始数组长度一样
=》新数组内每一个数据都是根据原始数组中每一个数据映射出来的
=》映射条件以return的形式书写 -
filter() 过滤数据
=》是一个新数组
=》数组内是原始数组中所有满足条件的项
=》条件以return的形式书写 -
every() 判断数组中是不是每一个都满足条件
=》返回值:一个布尔值
=》如果数组中每一个都满足条件,那么返回true
=》如果数组中任何一个都不满足条件,返回false -
some() 判断数组中是不是有某一个都满足条件
=》返回值:一个布尔值
=》如果数组中任何一个都满足条件,那么返回true
=》如果数组中所有都不满足条件,返回false -
find() 作用:查找数组中某一个数据
=》返回值:数组中你查找到的该数据
所用在复杂数据类型的查找 -
reduce() 数组.reduce(function(prev,item,index,arr){},初始值)
=》函数,函数根据数组中的成员进行重复调用
第一个参数:初始值活每一次叠加后的结果
第二个参数:每一项
第三个参数:索引
第四个参数:原始数组1;
=》初始值:默认值是0,表示从什么位置开始叠加
=>进行叠加累计
数组去重
方案一:
1. 排序 arr.sort(function(a,b){return a-b});
2. 把一样的删除掉
for(let i=0;i<arr.length;i++){
if(arr[index]=== arr[index+1]){
arr.splice(index,1);
index--; //解决数组塌陷
}
}
方案二:
1. 准备一个新数组
2. 循环遍历原始数组,一个一个把数据添加到新数组中
=》在添加的时候,判断新数组内是否有该数据,如果有,就什么都不做,如果没有,就添加进去
var newArr=[];
for(var i=0;i<arr.length;i++){
if(newArr.indexOf(arr[i]) === -1) {
newArr.push(arr[i])
}
}
方案三:
- 循环遍历原始数组
- 每一个数据判断后面是否还出现这个内容
=》如果没有出现,就什么都不做,继续下一次
=》如果有出现,那么把后面的干掉
for(var i=0;i<arr.length;i++){
var index =arr.indexOf(arr[i],i+1)
if(index==-1) {
arr.splice(index,1);
i--;
}
}
方案4:
和方案3基本一致的方式
方案3为了重复判断这一个数据出现多少次,使用了i–
不用if来判断力,用while
for(var i=0;i<arr.length;i++){
var index = arr.indexOf(arr[i],i+1);
while(index!==-1){
arr.splice(index,1);
// 注意:因为重复的时候,如果index不变,那么就是死循环
index = arr.indexOf(arr[i],i+1)
}
}
方案5:利用对象数据类型来进行数组去重
=》对象内的key可以是纯数字
=》对象内的key不重名
1. 准备一个空对象
2. 循环遍历数组
=》把数组内每一个数据当做键 来添加在对象内,值是什么无所谓
3. 循环遍历对象
=》把对象内的每一个key添加到一个新的数组内
var obj = {};
for(var i=0;i<arr.length;i++){
var item = arr[i];
obj[item] = 'test';
}
var newArr = [];
for(var k in obj){
newArr.push(k);
}
方案6:
借助一个数据类型叫做Set
=>数据类型不接受重复数据
语法:var s = new Set([数据1,数据2…])
2. 把set数据类型还原成数组
=>语法1:Array.from(set数据类型)
=>语法2:[…set数据类型] 展开运算符
var s = new Set([1,2,3,7,3,2,1]);
// var res = Array.from(s)
var res = [...s];