JavaScript常用数组操作方法
1.concat()连接两个或多个数组
var arr3=arr1.concat(arr2);
2.join()把数组所有元素放入一个字符串,通过指定的分隔符连接。默认逗号连接,不改变原数组
3.push()向数组末尾添加元素,并返回新的长度,会改变原数组
4.pop()删除并返回数组的最后一个元素,会改变原数组
5.shift()删除并返回数组的第一个元素,会改变原数组
6.unshift()向数组开头添加元素,并返回新的长度,会改变原数组
7.slice(start,end)返回被删除元素的数组,包含start不包含end,不改变原数组
var arr = [1, 2, 3,4]
console.log(arr.slice(1,3));//[2, 3]
console.log(arr);//[1, 2, 3,4]
8.splice(index,num,替换的数据),返回的是被删除元素的数组,会修改原数组
var arr = [1, 2, 3,4]
var arr2=arr.splice(1,2,7,8,9)
console.log(arr);//[1,7,8,9,4]
console.log(arr2);//[2,3]
9.sort()排序
var arr = [1, 3,10, 6,4,0]
var arr1=arr.sort((a,b)=>a-b)//升序
var arr2=arr.sort((a,b)=>b-a)//降序
console.log(arr1);
console.log(arr2);
10.reverse()颠倒数组
循环
11.every()每一项都返回true,结果则返回true
12.some()是对数组中每一项运行给定函数,如果该函数对任一项返回true,则返回true。
13.filter()返回结果为true的项组成的数组
let arr = [{ name: 'zs', age: 18 }, { name: 'ls', age: 48 }, { name: 'wwu', age: 28 }]
let arr1 = arr.filter(t => t.age > 20)
console.log(arr1);//[{ name: 'ls', age: 48 }, { name: 'wwu', age: 28 }]
14.forEach(可以三个参数,第一个是value,第二个是index,第三个是数组体)
缺点:不能同时遍历多个集合,在遍历的时候无法修改和删除集合数据,方法不能使用break,continue语句跳出循环,或者使用return从函数体返回,对于空数组不会执行回调函数
优点:遍历的时候更加简洁,效率和for循环相同,不用关心集合下标的问题,减少了出错的效率
应用:用于调用数组的每个元素,并将元素传递给回调函数
let arry=[9,8,7,6,5,4]
array.forEach(function(value,index,arr){
console.log(value)//9,8,7,6,5,4
})
15.for in:(它大部分用于遍历对象)
定义:用于循环遍历数组或对象属性,fot in循环里面的index是string类型的,
代码每执行一次,就会对数组的元素或者对象的属性进行一次操作
缺点:某些情况下,会出现随机顺序的遍历,因为里面的值是string类型,所以增加了转换过程,因此开销较大
优点:可以遍历数组的键名,遍历对象简洁方便
//首先遍历对象
let person={name:"老王",age:23,city:"大唐"}
let text=""
for (let i in person){
text+=person[i]
}
console.log(text)
输出结果为:老王23大唐
//其次在尝试一些数组
let arry=[1,2,3,4,5]
for (let i in arry){
console.log(arry[i])
}
//能输出出来,证明也是可以的
})
16.for of:(可遍历map,object,array,set string等)用来遍历数据,比如组中的值,
优点:避免了for in的所有缺点,可以使用break,continue和return,不仅支持数组的遍历,还可以遍历类似数组的对象,支持字符串的遍历
最简洁,最直接的遍历数组的语法
支持map和Set对象遍历
缺点:不适用于处理原有的原生对象(原生对象是一个子集,包含一些在运动过程中动态创建的对象)
//遍历数组
let arr=["nick","freddy","mike","james"];
for (let item of arr){
console.log(item)
}
//结果为nice freddy mike james
//遍历对象
let person={name:"老王",age:23,city:"唐山"}
for (let item of person){
console.log(item)
}
//我们发现它是不可以的
//首先它和forEach一样不可以遍历对象
//解决办法:就是把对象先转化为数组类型- -
//有一个对象:
let obj={a:1,b:2,c:3}
//用Object.keys属性转化
let obj2=Object.keys(obj)
//最后就可以用来遍历了
for (let i of obj2){
console.log(i)
}
//输出结果就能出来了,forEach同理
17.map()方法返回一个新数组,此方法可以以一个函数为参数,循环数组的每一个元素,函数将数组中的元素接收为单个参数.
let arr = [1, 5, 10];
let arr1 = arr.map(t => t * 10);
console.log(arr);//[1, 5, 10]
console.log(arr1);//[10, 50, 100]
18.reduce()
reduce用法详细文档.
一、语法
arr.reduce(function(prev,cur,index,arr){
…
}, init);
其中,
arr 表示原数组;
prev 表示上一次调用回调时的返回值,或者初始值 init;
cur 表示当前正在处理的数组元素;
index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1;
init 表示初始值。
看上去是不是感觉很复杂?没关系,只是看起来而已,其实常用的参数只有两个:prev 和 cur
二、实例
先提供一个原始数组:
var arr = [3,9,4,3,6,0,9];
- 求数组项之和
var sum = arr.reduce(function (prev, cur) {
return prev + cur;
},0);
console.log(sum);//34
- 求数组项最大值
var max = arr.reduce(function (prev, cur) {
return Math.max(prev,cur);
});
console.log(max);//9
- 数组去重
var newArr = arr.reduce(function (prev, cur) {
prev.indexOf(cur) === -1 && prev.push(cur);
return prev;
},[]);
console.log(arr);//[3,9,4,3,6,0,9]
console.log(newArr);//[3,9,4,6,0]