JS 数组

作者: 加油吧_ | 来源:发表于2018-05-16 23:32 被阅读1次

Array 对象

一. 用法

1. var a = Array(3)

// 生成长度为3的数组

            Stack                      Heap
 a         ADDR12                     12
                                       length: 2
                                        __proto__

2.var a = Array(3,3)

new Array // 加不加new 都一样

            Stack                      Heap
 a         ADDR13                    13
                                      0:3
                                      1:3
                                    length: 2
                                     __proto__

3. 基本类型与复杂类型(Object)不同

Number()=>基本类型                    Object()=>复杂类型

new Number()=>对象                    new Object()=>复杂类型

加不加new不一样                            加不加都一样

function 与Function的区别

  • function 关键字 与if var 相似
  • Function 全局对象 window.Function
  • Function('x','y','return x+y')
  • new Function('x','y','return x+y')
  • 加不加 new 结果一样

二. 函数声明方法总结

1. 具名函数 (推荐)

function f(x,y){
return x + y
}

2. 匿名函数 + var

var f
f = function(x,y){ return x+y }

3. 具名函数 + var

var f1
f1= function f2(x,y){
return x+y
}
console.log(f2) // undefined

4. window.Function + var

var f
f = new Function('x','y','return x+y')

三. JS 中数组的本质

数组:用Array 构造出来的对象
人类理解:数组就是数据的有序集合
JS理解:数组就是原型链中有 Array.prototype 的对象

image.png
  • 数组的proto指向Array.prototype
  • 数组与对象只是原型链不同

伪数组

  • 有 0,1,2,3,4,5...n,length 这些 key 的对象
  • 原型链中没有Array.prototype这一环

四. 数组的 API

  • Array.prototype.forEach
  • Array.prototype.sort
  • Array.prototype.join
  • Array.prototype.concat
  • Array.prototype.toString
  • Array.prototype.map
  • Array.prototype.filter
  • Array.prototype.reduce

1. forEach

forEach的用法与map方法一致,参数是一个函数,该函数同样接受三个参数:当前值、当前位置、整个数组。

用法

源代码

function log(element, index, array) {
  console.log('[' + index + '] = ' + element);
}

[2, 5, 9].forEach(log);
// [0] = 2
// [1] = 5
// [2] = 9
function forEach(array,x){
    for(let i=0;i< array.length;i++){
        x( array[i] , i )
    }
}
 var a = [1,2,3,4]
a.forEach(function( x, y ){
      console.log(x,y)
})

下面是老师的过程 forEach

forEach1.png forEach2.png
forEach3.png forEach4.png forEach5 this.png forEach6.png

2. sort

sort方法对数组成员进行排序,默认是按照字典顺序排序。排序后,原数组将被改变。

var a=[1,4,5,2,7]
a.sort()
[10111, 1101, 111].sort(function (a, b) {
  return a - b;
})
// [111, 1101, 10111]

sort的参数函数本身接受两个参数,表示进行比较的两个数组成员。如果该函数的返回值大于0,表示第一个成员排在第二个成员后面;其他情况下,都是第一个元素排在第二个元素前面。

3. map

map方法将数组的所有成员依次传入参数函数,然后把每一次的执行结果组成一个新数组返回。

4. filter()

filter方法用于过滤数组成员,满足条件的成员组成一个新数组返回。它的参数是一个函数,所有数组成员依次执行该函数,返回结果为true的成员组成一个新数组返回。该方法不会改变原数组。

filter方法的参数函数可以接受三个参数:当前成员,当前位置和整个数组。

[1, 2, 3, 4, 5].filter(function (elem, index, arr) {
  return index % 2 === 0;
});
// [1, 3, 5]

5. join()

join方法以指定参数作为分隔符,将所有数组成员连接为一个字符串返回。如果不提供参数,默认用逗号分隔。

a= [1,2,3]
a.join('饭')
// ' 1饭2饭3  '

5. concat()

concat方法用于多个数组的合并。它将新数组的成员,添加到原数组成员的后部,然后返回一个新数组,原数组不变。

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

6. reduce reduceRight

reduce方法和reduceRight方法依次处理数组的每个成员,最终累计为一个值。它们的差别是,reduce是从左到右处理(从第一个成员到最后一个成员),reduceRight则是从右到左(从最后一个成员到第一个成员),其他完全一样。

[1, 2, 3, 4, 5].reduce(function (a, b) {
  console.log(a, b);
  return a + b;
})
// 1 2
// 3 3
// 6 4
// 10 5
//最后结果:15

上面代码中,reduce方法求出数组所有成员的和。第一次执行,a是数组的第一个成员1,b是数组的第二个成员2。第二次执行,a为上一轮的返回值3,b为第三个成员3。第三次执行,a为上一轮的返回值6,b为第四个成员4。第四次执行,a为上一轮返回值10,b为第五个成员5。至此所有成员遍历完成,整个方法的返回值就是最后一轮的返回值15。

reduce1.png reduce2.png

相关文章

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

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

  • js数组题目

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

  • js 数组

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

  • JS数组以及数组变换

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

  • 数组检测

    检测是否是数组: 数组转字符串: 字符串转换数组: js对象转换成js字符串: js字符串转换成js对象:

  • 概念集合

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

  • JS 数组

    JS 数组是一种特殊的对象,不是真正的数组,它只##是通过对象来模拟数组。 JS 数组的定义 let arr = ...

  • javaScript的数组

    js中没有数组类型 js 中数组是以内置对象的形式存在 数组定义01 var attr = new Array('...

  • 数组

    数组的定义: js:存储多个相同类型数据 ,有序的数据;php数组 1,:索引数组,同js;声明:$arrName...

  • js笔记

    js数组 删除某个元素 js数组是否含有某个元素 判断value为undefined cookie操作

网友评论

      本文标题:JS 数组

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