js中数组的api整理,首先列出所有的方法:
es5:
join(), sort(), slice(), splice(), concat(), reverse(),
push(), pop(), shift(), unshift(),
forEach(), map(), some(), every(), filter(), reduce(),
indexOf(), lastIndexOf(),
es6:
Array.form(), Array.of(), copyWithin(), find()+findIndex(), fill(), entries()+keys()+values(),
includes()
1.for of直接遍历数组, for in (遍历数组的下标,遍历对象更简洁)
for(i in arr){
console.log(arr[i])
}
for(i of arr){
console.log(i)
}
2. forEach()循环
- 没有返回值,对原数组没有影响(不支持return输出,return用于跳出当前循环)
arr.forEach((val,index,arr)=>{
console.log('val:',val, 'index:',index ,'arr:',arr)
})
3. map循环
- 有返回值,return什么就输出什么新数组,不改变原数组。
let mapArr = arr.map((item)=>{
return item*2
})
console.log(mapArr)
console.log(arr)
4. filter()
- 有返回值,return出 判断为true的元素组成的数组,若条件不满足返回空数组。不改变原数组
let filterArr = arr.filter(item=>{
return item>3
})
console.log(filterArr)
console.log(arr)
5. find()
- 有返回值,return出第一个判断为true的元素,则跳出循环,输出符合条件的元素。若条件不符合,输出undefined.不改变原数组。
let findArr = arr.find(item=>{
return item>3
})
console.log(findArr)
6. every()
- 数组中每一项符合条件返回true,否则返回false
let everyArr = arr.every(item=>{
return item>3
})
console.log(everyArr)
7. some()
- 数组中的任一项符合条件符合,则返回true,则返回false。
let someArr = arr.some(item=>{
return item >3
})
console.log(someArr)
8. reduce()
let reduceArr = arr.reduce((sum,next,index)=>{
return sum += next
})
console.log(reduceArr)
var arr1 = [[1,2,3],[8,9,9],[4,5,6]]
let arr2 = arr1.reduce((sum,next,index)=>{
return sum.concat(next)
})
console.log(arr2) //[1,2,3,8,9,9,4,5,6]
9. includes()
- 不用return,没有回调,输出true/false
console.log(arr.includes(3))
10. keys() / values() / entries()
- keys()是对键名的遍历
- values()是对键值的遍历
- entries()是对键值对的遍历
11. 解构赋值 (浅拷贝,因为它不能对多维数组或对象达到深拷贝的作用)
数组的解构赋值
let a = [0,1,2,3]
let b = [...a]
b.push(4)
console.log(a) // [0,1,2,3]
console.log(b) // [0,1,2,3,4]
对象的解构赋值
用法:
let {name="swr",age} = {age:28}
console.log(name)
console.log(age)
应用:
function ajax({method,url,type='params'}){
console.log(method)
console.log(url)
console.log(type)
}
ajax({method:"get",url:"/"})
12.扩展运算符
- 数组使用扩展运算符示例
- 对象也可以使用扩展运算符
扩展运算符用三个点号表示,把数组或类数组对象展开成一系列用逗号隔开的值
剩余运算符也是三个点号,不过其功能与扩展运算符恰好相反,把逗号隔开的值序列组合成一个数组
let arr1 = [1,2,3]
let arr2 = [4,5,6]
let arr3 = [...arr1,...arr2]
console.log(arr3) // [ 1, 2, 3, 4, 5, 6 ]
// 但是扩展运算符不能把伪数组转为数组(除了有迭代器iterator的伪数组,如arguments)
let likeArr = { "0":1,"1":2,"length":2 }
let arr = [...likeArr] // 报错 TypeError: likeArr is not iterable
// 但是可以用Array.from把伪数组转为数组
let likeArr = { "0":1,"1":2,"length":2 }
let arr = Array.from(likeArr)
console.log(arr) // [1,2]
通过扩展运算符和Object.assign对对象进行合并的行为,是属于浅拷贝
let name = { name:"zf" }
let age = { age:18 }
let person = {}
Object.assign(person,name,age)
console.log(person)
let name = { name:"zf" }
let age = { age:18 }
let person = {...name,...age}
console.log(person)
14. 数组去重
1.)双层for循环
var arr = [1,2,3,1,2,3,5,6,7]
function unique(arr){
if(!Array.isArray(arr)){
console.log('type error')
return
}
let res = [arr[0]]
for(let i = 0
let flag = true
for(let j = 0
if(arr[i] === arr[j]){
flag = false
break
}
}
if(flag){
res.push(arr[i])
}
}
return res
}
console.log(unique(arr)) // [1, 2, 3, 5, 6, 7]
2.)indexOf()简化内层循环
- NAN不能去重,因为indexOf()底层是‘===’,而NAN===NAN是不相等的
var arr = [1,2,3,1,2,3,5,6,7]
function unique(arr){
if(!Array.isArray(arr)){
console.log('type error')
return
}
let res = [arr[0]]
for(let i = 0
var current = arr[i]
if(res.indexOf(current) === -1){
res.push(current)
}
}
return res
}
console.log(unique(arr)) // [1, 2, 3, 5, 6, 7]
3.)排序后去重
- sort方法排序后,相同的元素就排在一起,只需比较当前元素和上一个元素是否相等。
var arr = [1,2,3,1,2,3,5,6,7];
function unique(arr){
if(!Array.isArray(arr)){
console.log('type error')
return
}
let res = []
let sortArr = arr.sort()
for(let i = 0;i<sortArr.length;i++){
if(sortArr[i] !== sortArr[i+1] ){
res.push(sortArr[i])
}
}
return res
}
console.log(unique(arr))
4.) ES6新增filter()方法
var arr = [1,2,3,1,2,3,5,'1',6,7];
function unique(arr){
if(!Array.isArray(arr)){
console.log('type error')
return
}
let res = arr.filter((item,index,arr)=>{
return arr.indexOf(item) === index
})
return res
}
console.log(unique(arr))
5.)ES6中的set()+扩展运算符/Array.from()
var arr = [1,2,3,1,2,3,5,6,7];
function unique(arr){
if(!Array.isArray(arr)){
console.log('type error');
return
}
return Array.from(new Set(arr))
return [...new Set(arr)]
}
console.log(unique(arr))