js map 只输出key_js数组与常用方法

看完这篇文章,你将了解:

  1. js 数组的本质
  2. 数组的构造函数
  3. 数组各种常用方法
  4. 其他小知识

一、数组到底是什么?

  • js里,数组就是一个对象,一个由Array构造出来的对象
  • 区分数组与伪数组(类似数组的对象)的方法是:看它的原型链是否指向Array.prototype,有没有这一prototype提供的各种方法(push( ),pop( ),shift( ),join( ))

如图:

663c72203bf9e54836027974e423dffb.png
a是数组,obj是伪数组

a是数组,是因为它指向Array的prototype,可push( ),可pop( )

obj不是数组,是因为它的原型链中没有指向Array的prototype这一环

据此,我们有一个检验数组的简单方法:

'push' in obj

88dfa43675cdf3fcdbeb7411b370089b.png

好吧,严格讲这个方法其实不严谨,因为万一伪数组对象也有'push'属性呢?

正式检验的话,应该用这个api:

Array.isArray(obj)

二、数组的构造函数

1.一个参数

a4c458c368f4eefed0a9a6c6956512f6.png

2.两个以上参数

8830b86b254c4fa8cc430e47d03b2ca9.png

由此可见,js里数组的构造函数具有不一致性的特点。

所谓不一致性,就是指:在参数个数不同的情况下,同一位置的相同参数,具有不同含义。
比如:Array在一个参数的情况下,这个参数表示长度;有两个以上参数时,这个参数又表示数组元素

三、Array.forEach函数

1.语法

a.forEach( function(value, key){ ? } ):

  • 它的参数是一个函数,此函数按value和key的顺序传参
  • 它的工作原理是:对a数组内每个元素,执行参数里的方法 ?

2.实例

c7578c500eb02bdbe83936dd09e87c37.png

四、Array.sort函数

1.语法

a.sort( function(x, y){ ? } ):

  • 它的参数是一个二元函数
  • ?一般两种写法,return x-y表示正序,return y-x 表示逆序
  • 与哈希表结合,可以实现更丰富的排序

2. 实例

9f6e627bb38d23eec33d39afc87e3c48.png

结合哈希表实现一例高级排序

35946fa7c5b6825663db5a8c905fa45d.png

五、Array.join函数

a.join('字符串'):将数组内各元素通过参数连接,返回一个字符串

7075d6e526f5a92ae254a158b756a5ae.png

六、Array.concat函数

a.concat(b):a是数组,b也是数组,可以把两个数组合并而不影响彼此

cd2f7d84e1b3bbe4dc9afb855bf05b33.png

a.concat( )也可用于拷贝数组

330c0a745831b1bb924f1d812625de4b.png
注:内存不相同的特点是,b变a不变

七、Array.map函数

map语法上与forEach一致,简单理解,就是一个增加了返回值的forEach

04cc5ec77e63d8df94d707f6b3b61f82.png

map中文译为“映射”,因为它可以将一个数组映射为另一个数组,甚至是对象

03094e32d9fcde5ba3aff66b47e86514.png

八、Array.filter函数

1.语法

a.filter( function(value, key){ ? } ):

  • filter就是一个过滤器,内部函数必须返回一个Boolean值(以规定谁能过,谁不能过)。
  • 最后结果是判断值为true的元素组成的数组

2.实例

e3035cd5ce669cff833e9dfbb8bad9d2.png

九、Array.reduce函数

这个函数有点复杂,举一个例子说明

762c3c56482605bd95451948baad00d7.png

可以看到,reduce的作用就是:给一个暂存器,一个元素变量,一个初始值。从初始值开始,一个一个元素访问,return每次计算的值更新暂存器,继续参与下次运算。

注:想象火车上有一个劫匪,背着麻袋,挨个车厢要东西。这个麻袋就是暂存器,各节车厢就是数组的各个元素,每次经过一节车厢,麻袋的内容都会变化,负责把东西装进去的,就是return

reduce方法十分强大,map和filter可以做的事,它也可以:

bde0a26c4df7a0c9b05aa534b109de4e.png

十、其他知识

1.js的构造函数

js构造函数,按简单类型和对象类型可以分为两类。对象类型根据构造函数参数的不同,又有数组和函数两种特殊情况

  • 简单类型如Number,String,Boolean,不加new是转换函数,加new是构造对象
  • 对象类型( 包括Array,Function ),加不加new都是构造对象

1fb0f769e62a7ee95e524e9b19f56a92.png
对象类型有没有new没区别,简单类型有区别
  • Array构造函数:已经介绍,↑
  • Function构造函数:Function构造函数一般传入多个参数。包括参数表与函数体(字符串)

4197c7a6bdf3822dde6d4ae3c4f58f3c.png

2.var 是一个表达式

无论跟着什么,都会有返回值undefined

88aedcac24012aca9680b7cca3b29541.png

3.没有返回语句的函数,默认返回undefined

你没写的话,它会在最后帮你加上“return undefined”

8444b681af6c1199756b610e7b42644d.png

知道了这一点,就可以解释console.log( )执行打印后,为什么总是(= =)跟着一个undefined

f6131426e4bcef13dd6d01085e4a43a1.png

4.匿名函数的简写

匿名函数都可以用 => 简写

c278cfe346eac33772bbb0d88549d2e8.png

用途:本文介绍的Array对象各种api(sort,map,filter,reduce),频繁使用匿名函数作为参数。将这些函数简写,可使代码更简洁。

2f9bbbf8606a118a249e41c279a5a36a.png

5.“链式”简写

以上介绍的各种数组api,可以通过“链式”调用组合到一起,完成各种需求。

1aa9ef806da58d7214a0aa6fc79a0a6c.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值