forEach能不能改变原数组?
const arr = [1,2,3,5,4];
let arr2 = [{name:'小米2',age:22},{name:'小米1',age:11},{name:'小米3',age:33}]
1.如果数组元素是基本数据类型,则无法改变原数组
arr.forEach((item,index,arr)=>{
//item = item*2 // 不可行,[1,2,3,5,4]
arr[index] = item*2 // 可行,[2,4,6,10,8]
})
console.log(JSON.stringify(arr))
2.如果数组元素是引用数据类型,直接修改整个元素,无法改变
arr2.forEach((item,index,arr)=>{
// item = {name:'小米4',age:44} // 不可行,[{"name":"小米2","age":22},{"name":"小米1","age":11},{"name":"小米3","age":33}]
// arr[index].age = item.age*2 // 可行,[{"name":"小米2","age":44},{"name":"小米1","age":22},{"name":"小米3","age":66}]
item.age = item.age*2 // 可行,[{"name":"小米2","age":44},{"name":"小米1","age":22},{"name":"小米3","age":66}]
})
console.log(JSON.stringify(arr2))
结论:
如果纯粹只是遍历数组,可以用forEach()方法
但是,如果你想在遍历数组的同时,去改变数组里的元素内容。那么,最好是用map()方法来做,不要用forEach()方法,避免出现一些低级错误。
sort排序
用来指定按某种顺序进行排列的函数。如果省略,元素按照转换为的字符串的各个字符的Unicode位点进行排序。
arr.sort((a,b)=>a-b)
console.log(JSON.stringify(arr)) // [1,2,3,4,5]
arr2.sort((a,b)=>a.age-b.age)
console.log(JSON.stringify(arr2)) // [{"name":"小米1","age":11},{"name":"小米2","age":22},{"name":"小米3","age":33}]