JS里的数组

作者: 宣泽彬 | 来源:发表于2018-06-20 11:11 被阅读16次

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

一.数组的定义:

    数组(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这两个属性比较特殊,使用后,效果会直接作用于数组本身,即数组本身的值会被改变。


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

相关文章

  • 关于JavaScript数组的一切

    ? JS里的"数组"不是数组,而是对象 js里的数组和其他语言中的数组是不同的,实际它并不是数组,而是一种arra...

  • JS 里的数组

    数组用法 在说数组的用法前先研究下string的用法和加new的用法 由此可见,直接使用和new的区别是:没有ne...

  • JS里的数组

    本篇文章将简要介绍一下数组的定义及其相关属性的用法。 一.数组的定义: 数组(array)是按次序排列的一组值。本...

  • 数组和元组

    TypeScript里如何对数组和元组进行类型注解 TypeScript 里的数组,实际上和JS里的数组完全是一样...

  • js 数组链接concat,和数组转字符串join,字符串转数

    js 数组链接用concat js 数组转成字符串 js 字符串转数组

  • js数组题目

    js面试题 js数组 一、按要求分割数组 将"js,数组,分类"字符串数组以/分割 for循环累加 join()把...

  • 微信小程序tab切换(动态修改data里数组的值)

    tab切换(动态修改data里数组的值) dom: css: js:

  • js 数组

    js 中数组的长度发生改变,数组就真的发生改变,快速清空数组就让数组长度为0js 数组的方法

  • JS数组以及数组变换

    有关数组 数组对象——一种特殊的对象JS其实没有数组,只使用对象来模拟数组 典型数组和JS数组的区别 典型数组 元...

  • 概念集合

    JS中的数组和Arrary的区别 js中的数组就是array对象

网友评论

    本文标题:JS里的数组

    本文链接:https://www.haomeiwen.com/subject/ozlzeftx.html