为了账号安全,请及时绑定邮箱和手机立即绑定

JS里的数组

标签:
JavaScript

    本篇文章将简要介绍一下数组的定义及其相关属性的用法。

一.数组的定义:

    数组(array)是按次序排列的一组值。本质上,数组属于一种特殊的对象。typeof运算符会返回数组的类型是object。因此,数组是一种特殊的对象,它具备对象所拥有的属性。

二.定义数组的几种办法:

//第一种:var a=[1,2,3]//第二种:var a=Array(3,3) //[3,3]//第三种:var a=new Array(3,3) //[3,3]

    在这里,后面两种方法存在着不一致性的情况,当Array()里只有一个参数时,参数所表示的含义为length的长度

var a=Array(3) //[undefined,undefined,undefined]var b=new Array(3) //[undefined,undefined,undefined]//与下面不一致var a=Array(3,3) //[3,3]var b=new Array(3,3) //[3,3]

    在这里值得一提的是,简单数据类型的定义方法中加不加new所得到的结果是不一样的,比如:

var a=Number(1) //声明的a为基本类型var b=new Number(1) //声明的b为对象

    而复杂数据类型中,加不加new所得到的结果是一样的。得到的均为一个对象。

三.伪数组

    伪数组的定义是原型链与Array.prototype没有一点关系的,并且可以类似数组一样能用length遍历的对象叫作伪数组。
arguments是目前唯一会接触到的伪数组:

function f(){    console.dir(arguments)
}
f.call(undefined,1,2,3)arguments={  0:1
  1:2
  2:3
  callee:ƒ f()
  length:3
  Symbol(Symbol.iterator):ƒ values()
  __proto__:Object}


四.介绍数组的几种常见属性及其使用方法

1.forEach

var a=['a','b','c','d']
a.forEach(function(x,y) {    console.log('value',x)    console.log('key',y)
})// value a// key 0// value b// key 1// value c// key 2// value d// key 3

    可以自己构造一个forEach函数:

var a=[1,2,3]
a.forEachSelf=function(x) {    for (let i=0;i<this.length;i++) {
        x.call(undefined,this[i],i)
    }
}
a.forEachSelf.call(a,function(x,y) {    console.log('value',x)    console.log('key',y)
})


2.sort

    sort属性的作用是对数组自身进行排序,进行的排序为快速排序,排序后会改变数组原来的值。

a.sort( function(x,y) { return x-y } ) //从小到大排序a.sort( function(x,y) { return y-x } ) //从大到小排序

    原理:return的值为非负数,则会交换x与y的位置

a=['马云','马化腾','李彦宏']hash={    '马云':167.92,    '马化腾':376,    '李彦宏':228.62
}
a.sort( function(x,y) { return hash[x]-hash[y] } ) //["马云","李彦宏","马化腾"]
a.sort( function(x,y) { return hash[y]-hash[x] } ) //["马化腾","李彦宏","马云"]


3.join

    join属性的作用是把数组里的每个值合并成一个字符串,并在每个值中间插入一个新的字符串。

var a=[1,2,3]
a.join('你好') //'1你好2你好3'a.join(',') //'1,2,3'a.join() //'1,2,3'

    这里值得一提的是一下几种情况:

var a=[1,2,3]1+'' //'1'a+'' //'1,2,3'a.toString() //'1,2,3'


4.concat

    concat属性的作用是创建一个新的数组,数组内的值为原来来个数组的值的合并。

var a=[1,2,3]var b=[4,5,6]
a+b //'1,2,3,4,5,6'a.concat(b) //[1,2,3,4,5,6]

    concat有一种特殊用法,可以通过使用concat属性来复制一个新的数组,新数组与被复制数组的值相同,但地址不同,因此是两个不相等的数组。

var a=[1,2,3]var b=a.concat([])
b //[1,2,3]a===b //false//要与下面的代码区分清楚var a=b
a===b //true


5.map

    map属性的功能和forEach属性的功能一模一样,但区别在于a.forEach没有返回值,但是a.map有返回值。

a.map(function (value,key) {    return value*2 }) // [2,4,6]//上述代码等价于下面的代码a.map( value => value*2 )

    若使用map属性时不写出返回值,默认返回undefined

6.filter

    filter属性和map属性也十分相似,也是要接受valuekey,也要返回值,filter属性的作用是“过滤”,在filter属性遍历数组中的每个值的时候,若返回值为true,则代表该值需要,并记录在filter即将返回的数组中,若返回值为false,则表示该值不需要,可以舍弃。

var a=[1,2,3,4,5,6,7,8,9,10]
a.filter ( function(value,key) {    return value>=5}) //[5,6,7,8,9,10]


7.reduce

    reduce属性的作用是遍历数组里的每个值,并把该值选出来进入函数中进行操作,把操作后的值保存并用于下一个数组的值的操作中。

var a=[1,2,3]
a.reduce ( function(sum,n) { //sum是上一项返回的结果,n是这一项数组传入的值
    return sum+n
},0) //0为sum的初始值// 6 值得注意sum和n均为value//上述代码等价于下面代码var a=[1,2,3]
a.reduce( (sum+n) => sum+n ,0 )


8.reverse

    reverse属性的作用是把数组的值翻转。并改变数组原来的值。

var a=[1,3,5,2,4,6]
a.reverse() //[6,4,2,5,3,1]

    注意:reversesort这两个属性比较特殊,使用后,效果会直接作用于数组本身,即数组本身的值会被改变。



本教程版权归饥人谷_宣泽彬和饥人谷所有,转载须说明来源



作者:宣泽彬
链接:https://www.jianshu.com/p/e930ae5039fe


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消