【学习】JS 数组

JS数组

JS其实没有真正的数组,只是用对象模拟数组

  • 典型的数组
    • 元素的数据类型相同
    • 使用连续的内存存储
    • 通过数字下标获取元素
  • JS 数组
    • 元素的数据类型可以不相同
    • 内存不一定是连续的(对象是随机存储的)
    • 不能通过数字下标,而是通过字符串下标
    • 也就是说数组可以有认可key,比如arr['xxx'] = 1

  • 创建
    • let arr = [1,2,3]
    • let arr = new Array(1,2,3)
    • let arr = new Array(3) 表示length=3
  • 转化
    • let arr = '1,2,3'.split(',')
    • let arr = '123'.split('')
    • Array.from('123')
  • 伪数组
    • 比如let arr = {0:'a', 1:'b',length:2}
    • 伪数组的原型链中并没有数组的原型
    • 没有数组共用属性的数组就是伪数组
  • 合并数组
    • arr1.concat(arr2)
    • 合并两个数组,得到一个新数组,不会改变原来的两个数组
  • 截取数组的一部分
    • arr1.slice(1) 从第二个元素开始
    • arr1.slice(0) 全部截取,经常用于复制数组

  • 删除元素
let arr = ['a', 'b', 'c']
delete arr['0']
//arr = [empty, 'b', 'c']
//数组的长度没有变

如果直接改length,如果length小于原来的,会直接删除后面的元素,不要随便修改length

以上两种方法不建议使用,建议时候以下方法:

  • 删除头部元素
    • arr.shift()
  • 删除尾部元素
    • arr.pop()
  • 删除中间元素
    • arr.splice(index,1) 删除index的一个元素
    • arr.splice(index,1,'x') 删除index的一个元素,并在删除位置添加’x’
    • arr.splice(index,1,'x','y') 删除index的一个元素,并在删除位置添加’x’,‘y’

  • 查看数字(字符串)属性名和值
for(let i = 0; i<arr.length; i++){
  console.log(`${i}: ${arr[i]}`)
}
arr.forEach(function(item,index){
  console.log(`${index}: ${item}`)
}
// forEach的写法
function forEach(array,fn){
  for(let i = 0; i<array.length; i++){
    fn(array[i],i,array)
  }
}
  • 查看单个属性
    • arr[0]
  • 索引越界
    • arr[arr.length] === undefined
    • arr[-1] === undefined
  • 查看某个元素是否在数组里
    • arr.indexOf(item) 存在返回索引,不存在返回-1
  • 使用条件查找元素
    • arr.find(item => item%2 === 0) 找第一个偶数
  • 使用条件查找元素的索引
    • arr.findIndex(item => item%2 === 0)

  • 在尾部加元素
    • arr.push(newItem) 修改arr,返回新长度
    • arr.push(item1,item2)
  • 在头部加元素
    • arr.unshift(newItem)
    • arr.unshift(item1,item2)
  • 在中间添加元素
    • arr.splice(index,0,'x') 在index处插入’x’
    • arr.splice(index,0,'x','y')
  • 反转顺序
    • arr.reverse() 修改原数组
  • 自定义顺序
    • arr.sort((a,b) => a-b)
      当返回的值>0,认为左边大,当返回的值小于0,认为右边大

数组变换

以下三个方式都不会改变原数组

  • map
    • n 变 n
      比如需要一个数组里的每个值变为原来的平方,可以使用arr.map(item => item*item)
  • filter
    • n 变少
      比如只需要数组里的偶数,可以使用arr.filter(item => item%2 === 0)
  • reduce
    • n 变1
    • 比如需要得到数组里值的总和,可以使用arr.reduce((sum, item) => {return sum+item},0)
    • 比如需要一个数组里的每个值变为原来的平方,可以使用arr.reduce((result,item) => {return result.concat(item*item)},[])
    • 比如只需要数组里的偶数,可以使用arr.reduce((result,item) => result.concat(item%2 === 1 ? [] : item),[])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值