js map 只输出key_js数组

本文深入探讨JavaScript数组的特点与操作方法,包括数组的创建、合并、截取、元素增删及查找等核心功能,并介绍了一些特殊技巧。

数组对象----一种特殊的对象

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

  • 典型的数组
  • 元素的数据类型相同
  • 元素连续的内存存储
  • 通过数字下标获取元素

99cdce9e9185a1c658a971ddbb7753f8.png
  • 但js的数组不这样
  • 元素的数据类型可以不同
  • 内存不一定是连续的(对象是随机存储的)
  • 不能通过数字下标,而是通过字符串下标
  • 这意味着数组可以有任何key
  • 比如
  • let arr =[1,2,3]
  • arr['xxx']=1

5d1ab5316f6ea105cda2287086df750a.png

创建一个数组

  • 新建
  • let arr =[1,2,3]
  • let arr =newArray(1,2,3)
  • let arr =newArray(3)
  • 转化
  • let arr ='1,2,3'.split(',')
  • let arr ='123'.split('')
  • Array.form('123')

8da6a7c561c8750b5e96f8e60665b317.png
  • 伪数组
  • let divList =document.querySelectorAll('div')
  • 伪数组的原型链并没有数组的原型(没有push,pop) ---第一步就是转化成正常数组
  • 创建一个数组(续)
  • 合并两个数组,得到新数组
  • arr1.concat(arr2)

1c4917b1eb88445dec4290cc67be633e.png
  • 截取一个数组的一部分
  • arr1.slice(1)//从第二个元素开始
  • arr1.slice(0)//全部截取
  • 注意,JS只提供浅拷贝

删除元素

  • 跟对象一样
  • let arr =['a','b','c']
  • delete arr ['0']
  • arr//[empty,'b','c']
  • 神奇,数组长度并没有变
  • 稀疏数组
  • 如果直接改length可以删除元素吗?
  • let arr =[1,2,3,4,5];
  • arr.length =1
  • 我x,居然可以?
  • js真神奇
  • 重要:不要随便改length

删元素续

  • 删除头部的元素
  • arr.shift()//arr被修改,并范湖被删元素
  • 删除尾部的元素
  • arr.pop()//arr被修改,并返回被删元素
  • 删除中间元素
  • arr.splice(index,1)//删除index的一个元素
  • arr.splice(index,1,'x')//并在删除位置添加'x'
  • arr.splice(index,1,'x','y')//并在删除位置添加'x','y'

0837d155f4dc4ef2e95bc60f217ab5c9.png

be66329ba707d30da4d245f4abc47bd1.png

查看所有元素

  • 查看所有属性名
  • let arr =[1,2,3,4,5];arr.x='xxx'
  • Object.keys(arr)
  • for(let key in arr){console.log(`${key}:${arr[key]}`)}
  • 以上不靠谱
  • 查看数字(字符串)属性名和值
  • for(let i=0;i<arr.length;i++){
  • console.log(`${i}:${i}`)
  • }
  • let arr =[1,2,3,4,5]
  • arr.x='x'

db251fa42b8f8acb267d3816ad63c72d.png
  • 你要自己让i从0增长到length-1
  • arr.forEach(function(item,index){
  • console.log(`${index}:${item}`)
  • })

3ecbe8a420a050d8cb5a5af6065f3fcc.png
  • 也可以用forEach/map等原型上的函数
  • 查看元素中使用for循环和forEach区别 forEach不支持, continue 和break

forEach是一个槛

  • 自己写forEach才能理解forEach
function forEach(array.fn){
 for(let i =0;i<array.length;i++){
    fn(array[i],i,array)
  }
}
  • forEach用for访问array的每一项
  • 对每一项调用fn(array[i],i,array)
  • 为什么要传入array呢?不为什么,规定如此

查看单个属性

  • 跟对象一样
  • let arr =[111,222,333]
  • arr[0]
  • 索引越界
  • arr[arr.length]===undefined
  • 举例
  • for(let i=0;i<=arr.length;i++){
  • console.log(arr[i].toString())
  • }
  • 报错 Cannot read property 'toString'of undefined

9dd2e6df4a08aea37c663fdd00c8bdf8.png

df1532dbbd21398be3c9a0dbc175096b.png
  • 查看某个元素是否在数组里
  • arr.indexOf(item)//存在返回索引,否则返回-1
  • 使用条件查找元素
  • arr.find(item=>item%2===0)//找到第一个偶数
  • 使用条件查找元素的索引
  • arr.findindex(riem=>item%2===0)
  • //找到第一个偶数的索引

6446eb849810ce1050f5644af2640867.png

d9722c5c113ebba846ee022f849deb95.png

6b3512f2461a1114c5c34f0727737869.png
返回对应元素的下标

增加数组中的元素(防止变成稀疏数组)

  • 在尾部加元素
  • arr.push(newltem)//修改arr,返回新长度
  • arr.push(item1,item2)//修改,返回新长度

bced52a3f0bd61d0647c9de8c918ebba.png
  • 在头部增加元素
  • arr.unshift(newltem)//修改arr,返回新长度
  • arr.unshift(item1,item2)..修改arr,返回新长度

073c4684b9e355248d353fa8cb9ba809.png
  • 在中间添加元素
  • arr.splice(index,0,'x')//在index处插入'x'
  • 在下标,什么都不删 插入 x
  • arr.splice(index,0,'x','y')

2bd733c3f8fbc8c99ef7ab01e4138ea7.png
在9的位置上删除0个,增加一个6.5

修改数组中的元素

  • 反转顺序
  • arr.reverse()//修改原数组
  • 自定义顺序
  • arr.sort((a,b)=>a-b)

595cc8dbee25a0a3d2f357f2be6058cb.png

著名面试题,如何把字符串换个方向

a5d5dca2281b0006f8e2dc9a64ca8a9e.png
先把字符串变成数组再反转之后再变成字符串

fe4111a00f387b455c5653da8b1a98e3.png
arr.sort()按顺序排序

ea04d6bb9b759ef3b5248ee77829e655.png
自定义排序

75bc08ed460993d521b8117f8b21d63c.png
简化

数组变换

8033fee7e8aebcf27641f68ed4795e69.png
  • map
  • n变n

9b0cfb26438384da5a66b19cdbffc1dd.png
整体操作
  • filter
  • n变少

ce9e4df6f584f18e6ee2c856eeeea818.png
item除于2的余数==0 过滤
  • reduce
  • n变1

a204839102aefbda19cfdbad7e738722.png
每次一篓子和钱相加再返回,0是初始值
  • 替代map

c6dbdfe59e0a0e4a6601f2a6a127d353.png
  • 代替filter

f7cebe10fd7741d3c8d772ca7183f4f1.png

ce86043747be2db77a8ce1076a9cd86f.png
简化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值