JS的数组不是典型数组
- 典型数组:
- 元素的数据类型相同
- 使用连续的内存存储
- 通过数字下表获取元素
- JS 中的数组不是典型的数组

arr中可以有任何key, 例如 'xxx'

arr 有时是一个伪数组, 他没有Array 的原型
创建一个数组
- 新建
let arr = [1,2,3]
let arr = new Array (1,2,3)
注意 : 当我们写成下列形式时,表示构建一个length : 3 的数组
let arr = new Array (3)
- 转换为数组
// 将字符串转化为数组
let arr = '1,2,3'.split(',')
let arr = '123'.split('')
Array.from('123')
3. 合并两个数组
[1,2]concat([3,4])
4. 截取一部分数组(不会改变原数组)
// 从第一个下标前截取
[1,2,3].slice(1)
我们也可以通过将index变为0 , 来实现浅拷贝数组
删除数组中的元素
如果我们采用 delete 的方法, 会产生 稀疏数组

若改length , JS会将我们的数组删除

所以我们应该采用以下几种方法:
- 删头部
[1,2,3].shift(0)
- 删尾部
[1,2,3].pop(0)
- 删中间(会改变原数组)
arr.splice(第几个元素,删除几个元素,在删除的位置添加什么元素)
我们也可以写成 arr.splice(1,0,1) 表示,在第一个位置,删除0个元素,加上一个1
查看所有元素
- 查看所有属性名
若使用 Object.keys(arr) 或 let i in arr 会将非数组元素也显示出来

所以,我们最好使用以下方法
for (let i = 0; i < arr.length; i++){
console.log(`${i} : ${arr[i]}`)
}
arr.forEach(function(xxx,yyy){
console.log(xxx,yyy)
})
// 原理
function forEach(array,fn){
for(let i = 0; i < array.length; i++){
fn(array[i],i)
}
}
forEach([1,2,3],function (x,y){
console.log(x,y)
})
- 查看单个属性
- 查看某个元素是否在数组里
arr.indexOf(1)
//若为真,返回index
//若为否,返回-1
- 查看满足条件的值
arr.find(item => item % 2 === 0)
// 一旦找到就会停下
- 查看满足条件的下标
arr.findIndex(item => item % 2 === 0)
// 一旦找到就会停下
增加元素
- 在头部增加元素
arr.unshift()
- 在尾部增加元素
arr.push()
- 在中间增加元素
arr.splice(index,0,要添加的元素)
- 反转数组
arr.reverse()
把字符串反转
let s = 'abcdefg'
// 将 s 变为数组
let arr = s.split('')
// 将arr反转
let arrreverse = arr.reverse()
// 将arrreverse变回字符串
let s2 = arrreverse.join('')
- 自定义顺序
// 写法1
arr.sort(function(a,b){
if (a > b){
return 1
}else if(a === b){
return 0
}else{
return -1
}
})
//写法2
let arr = [{name:'小明',score:95},{name:'小红',score:80}]
arr.sort(a,b) => {
return a.score - b.score
}
数组变换
- map(n变n)

// 将数组的每一个元素进行平方
let arr = [1,3,5,7,9]
arr.map(item => item*item)
- filter (n变少)

let arr = [1,4,5,6,9]
arr.filter(item => item % 2 === 0)
- reduce (n变1)

let arr = [1,2,3,4,5,6,7,8,9]
arr.reduce((result,item) => result.concat (item % 2 === 1 ? [] : item ) ,[])

arr.reduce((result,item) => {
if (item.parent === null){
result.id = item.id
result['名称'] = item['名称']
}else{
result.children.push(item)
}
return result
},{id:null,children:[]})
参考资料来自:饥人谷