JS数组相关

99 阅读3分钟

JS数组

1. 数组对象

  1. js没有真正的数组,是用对象模拟的数组
let arr= [1,2,3]
typeof arr // "object"
arr instanceof Object // true
arr instanceof Array // true

instanceof在判断数组是,即会把数组当做Array类型,又会把数组当做Object类型,都会返回true
  1. JS数组不是典型的数组。
  • 典型的数组: 元素数据类型相同、使用连续存储、通过数字下标获取元素。
  1. JS数组:
  • 元素类型可以不同
  • 内存不一定个连续
  • 不通过数字下标,而是通过字符串下标。说明下标可以是任何key.

2. 创建一个数组

  1. 新建数组
let arr= [1,2,3]
let arr=new Array(1,2,3)
let arr = new Array(3)
  1. 转化
let arr='1,2,3'.split(',')
let arr='123'.split('')

Array.from('123')
  1. 伪数组
  • 没有数组公用属性的数组就是伪数组
  • Array.from :类数组转为数组
  • 伪数组的原型链没有数组的原型。
  1. 合并2个数组(得到一个新的数组)
arr1=[1,2,3]//(3) [1, 2, 3]
arr2=[4,5,6,7]//(4) [4, 5, 6, 7]
arr1.concat(arr2)//(7) [1, 2, 3, 4, 5, 6, 7]
  1. 截取数组的一部分

3.删除

  1. 操作
let arr = [1,2,3,4]
delete arr['1']
arr // (4[1, empty, 3, 4]
  • delete删除某元素之后,长度没有改变
  1. 修改length可以删除数组元素,所以不要随意修改数组的length
    6PUGkV.png
  2. 删除头部元素
  • shift()
let arr = [1,2,3,4,5,6,7,8]
arr.shift()
arr // (7) [2, 3, 4, 5, 6, 7, 8]
  1. 删除尾部元素
  • pop()用法
let arr = [1,2,3,4,5,6,7,8]
arr.pop()
arr // (7) [1, 2, 3, 4, 5, 6, 7]
  1. 删除中间元素
  • splice()用法,利用它可以实现在指定位置删除、替换、插入指定数量的元素。
  • 方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。
arr.splice(index,1) //删除Index位置的1个元素
arr.splice(index, 1, 'x')//并在删除位置添加x
arr.splice(index, 1,'x','y')//并在删除位置添加x,y

4. 查看属性

  1. 查看所有属性名
let arr = [1,2,3,4,5,6,7,8]
arr.x='xxx'
Object.keys(arr) // (9) ["0", "1", "2", "3", "4", "5", "6", "7", "x"]
for (let key in arr){
    console.log(`${key}:${arr[key]}`)
}
//=>
 0:1
 1:2
 2:3
 3:4
 4:5
 5:6
 6:7
 7:8
 x:xxx
  1. 查看单个属性
  • 和查看对象一样
  • 索引越界时
arr[arr.length] === undefined
  1. 查找某个元素是否在数组中
arr.indexOf(item)//存在返回索引,不存在返回-1
  1. 使用条件查找元素
arr.find(item => item%2 ===0)// 找第一个偶数
  1. 使用条件查找元素索引
arr.findIndex(item => item %2 ===0) //找第一个偶数的索引
  1. for和forEach的区别:
  • for可以break和continue。forEach没有,只能一次走到结尾。
  • for是块级作用域。forEach是函数作用域
  1. 总结index, find ,findindex,

5. 增加元素

  1. 尾部添加元素
arr.push(item) // 修改arr,并返回新的长度
  1. 头部添加
arr.unshift(item) //修改arr,并返回新的长度
  1. 中间插入
arr.splice(index,0,x,y) // index处插入x,y

6. 修改数组元素

  1. 翻转顺序
arr.reverse() //修改原数组
  1. 自定义顺序
//sort:
let arr = [{name:'小米', age:18},{name:'红', age:48},{name:'小蓝', age:53}]
arr.sort()
/* 0: {name: "小米", age: 18}
1: {name: "红", age: 48}
2: {name: "小蓝", age: 53}
length: 3
__proto__: Array(0)
 */
arr.sort(function(a,b){
if(a.age > b.age){return 1}
else if(a.age = b.age){return 0}
else {return -1}
})
//可以简写为
arr.sort((a,b )=>{
    return a.age - b.age
})

7.数组变换

map

  1. n变n.
  2. 一一映射
let arr = [1,2,3,4,5,6,7,8]
//map
arr.map(item => item * item) //(8)   [1, 4, 9, 16, 25, 36, 49, 64]

filter

  1. n变少
let arr = [1,2,3,4,5,6,7,8]
arr.filter(item=>item %2 ===0?true:false)
arr.filter(item=>item %2 ===0) //(4) [2, 4, 6, 8]

reduce

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

filter、map、reduce