数组是一个有序的集合,javascript数组中的元素的类型可以是任意的,同一个数组不同元素之间的类型也是可以不同的。数组也是对象,有个length属性,记录数组的长度。

  1. 创建数组
    有两种方法:
      数组直接量,var arr = [1,2,];这样会创建一个有两个元素的数组。之所以不是3个元素,是因为最后一个逗号是可选的。
      另外一种是调用构造函数:
          var arr = new Array(10);这样会创建一个具有10个元素的数组;或者
              var arr = new Array(1,2,3,4,5,6);直接传进数组元素
      
  2. 数组元素的读写
    数组是特殊的对象,数组特殊在维护了一个length属性。数组的索引其实也就是对象的属性,0--2`32-2的属性值是索引。0--2`32-2的索引会自动转化为字符串的属性值。如下:
    var a = [1,2];
    console.log(a.[0])//1

    数组是对象,这因为着可以给它添加属性:

    var a = [];
    a.test = 'test';
    console.log(a.length);
    a['0'] = 3;
    console.log(a.length);
    console.log(a.test);//test
    console.log(a['0']);//3
    console.log(a[0])//3

     

    从上面也可以看到,给数组添加‘0’的属性,也会自动转化成索引。

  3. 数组长度
    length属性总是比最大的一个索引大1(非稀疏数组)。这个length属性有一些特殊的行为。
    往数组添加索引时,自动维护:
    var a = [,,];
    console.log(a.length);//
    a[] = ;
    console.log(a.length);//

    更改length为比现在当前长度的非负整数的时候,大于等于长度的那些元素会被删除:

      var a = [1,2,3,4,5,6,7,8,9];
    console.log(a.length);//
    a.length = 8;
    console.log(a[8]);//undefined
    a.length = 7;
    console.log(a[7]);//undefined

    更改length为比当前长度达的非负整数的时候,相当于增加了空白区域。

  4. 数组遍历
    使用for:
    for(var i = 0; i < array.length; i++){
    
        }

    这样做有个问题就是:要访问很多遍array的length属性,所以更好的做法是下面这种:

    for(var i = 0, len = array.length; i < len; i++){
    
        }

    或者像下面这样从后面开始遍历:

    for(var i = array.length - 1; i >= 0; i--){
    
        }

    另外可以用for/in来遍历:

    for(var i in array){
    
        }

    但是这样子带来的问题就是,除了索引属性之外,还会有继承来的属性、负整数属性、字符串属性也会被包含在其中。

    ecma5定义了一个forEach函数:

      var a = [1,2,3,4,5];
    a.forEach(function(index){
    console.log(index)
    })
  5. 数组方法
    1.   转换方法toString()、toLocalString()、valueOf(),join();
      valueOf得到的还是数组本身。而第二、第三个得到的都是一个数组,实际上是在每个元素上调用了一次toString或toLocaleString函数。

        var a = [1,2,3,4,5];
      console.log(a.toLocaleString());//1,2,3,4,5
      console.log(a.toString());//1,2,3,4,5
      console.log(a.valueOf());//[1,2,3,4,5]

      而且会将数组扁平化:

      var a = [1,2,3,4,5,[ 6,7,[ 8,9] ] ];
      console.log(a.toLocaleString());// 1,2,3,4,5,6,7,8,9
      console.log(a.toString());// 1,2,3,4,5,6,7,8,9

      join方法是利用给定的字符将数组元素连成一个字符串。实际上对每个元素调用了toString方法。

    2. 
      

      var a = [1,2,3,4,5,[6,7,[8,9]]]
      console.log( a.join('*') );//1*2*3*4*5*6,7,8,9
      console.log(a);//var a = [1,2,3,4,5,[6,7,[8,9]]]

      
      
    3. 栈方法push()、pop()
      push会在数组后面添加一个元素,并增加length的值。
          var a = [1,2,3,4,5];
      console.log(a.length);//
      a.push(6);
      console.log(a.length);//
      console.log( a[a.length - 1] );//

      pop刚好相反,它会返回删除的元素。

    4. 队列方法shift()、unshift()
      shift将数组的第一个元素删除并返回,后面的元素往前移,减少length的值。
          var a = [1,2,3,4,5];
      console.log(a.length);//
      a.shift();
      console.log(a.length);//
      console.log( a[0] );//

      unshift刚好相反。

    5. 重排序方法reverse()、sort()
      reverse方法是将数组反序。
          var a = [1,2,3,4,5];
      console.log( a.reverse() );//[5, 4, 3, 2, 1]
      console.log(a);//[5, 4, 3, 2, 1]

      可以看到,reverse是直接改变数组本身的。
      另一个sort方法接受一个函数作为排序的依据。如果不传这个参数,则是对每个元素调用toString方法然后比较。也就是全部转换为字符串然后再比较。

          var a = [2,43,25,64,62,45,75,10,4,7]
      console.log(a.sort());//[10, 2, 25, 4, 43, 45, 62, 64, 7, 75]
      console.log(a);//[10, 2, 25, 4, 43, 45, 62, 64, 7, 75]

      如果传入函数,则函数有两个参数,就是两个要进行比较的数据。如function(a1,a2){};要想a1排在前面就返回小于0;要想顺序不变返回0;另一种情况你懂得。如想要按照数字的小到大排序。

        var a = [2,43,25,64,62,45,75,10,4,7]
      console.log(a.sort(function(a, b){
      return a - b;
      }));//[2, 4, 7, 10, 25, 43, 45, 62, 64, 75]
      console.log(a);//[2, 4, 7, 10, 25, 43, 45, 62, 64, 75]
    6. 操作方法concat()、slice()、splice()
      concat是将一个数组并接在另外一个数组后面。
          var a = [1,2,3,4];
      var b = [5,6,7,[7,8],9];
      console.log(a.concat(b))//[1, 2, 3, 4, 5, 6, 7, [7,8], 9]
      console.log(a)//[1,2,3,4];
      console.log(b)//[5,6,7,[7,8],9]

      可以看到concat并不会将数组扁平化、而且不会改变原数组。它是想创建一个a的副本,然后将b复制进去然后返回。

      slice是基于当前数组,创建一个新的数组。接受两个参数,第二个参数是可选的。如果只有一个参数,就是从指定位置到最后一个的项。如果有两个参数,则是从第一个到第二个指定位置的项,但不包括最后一个。第二个参数可以是负数,-1代表最后一个项,但不包括最后一个。

          var a = [1,2,3,4,5];
      console.log( a.slice(1) );//[2,3,4,5]
      console.log( a.slice(0, 3) );//[1,2,3]
      console.log( a.slice(0, -3) );;//[1,2]

      同样的,slice不会改变原数组。并且当第二个参数的位置在第一个参数位置之前的时候,会返回一个空数组。

      splice功能非常强大,可以删除、插入、替换
      如果只传入两个参数,就是删除,第一个参数代表要删除的其实位置,第二个参数代表要删除的项的个数。

        var a = [1,2,3,4,5];
      console.log(a.splice(1,2));//[2,3]
      console.log(a);//[1,4,5]

      如果传入两个以上参数,并且第二个参数是0,就是插入。第一个参数代表要插入的位置,第三个以及以后的参数代表要插入的项。

          var a = [1,2,3,4,5];
      console.log(a.splice(1,0,7,8));//[]
      console.log(a);//[1,7,8,2,3,4,5]

      如果传入两个以上参数,并且第二个参数不是0,就是替换。第一个参数代表要替换的开始位置,第二个参数代表要替换掉多少个项,第三个以及以后的参数代表要替换进去的项。

          var a = [1,2,3,4,5];
      console.log(a.splice(1,2,7,8));//[2,3]
      console.log(a);//[1,7,8,4,5]

      最后看一个例子:

          var a = [1,2,3,4,5];
      console.log(a.splice(-1,2,7,8));//[5]
      console.log(a);//[1, 2, 3, 4, 7, 8]

      这个例子说明,第一个参数接受负数,-1代表最后一个项。

    7. 位置方法indexOf()、lastIndexOf()
      两个方法的区别是一个从前往后找,一个从后往前找。返回第一个找到的项的位置。
      接受两个参数,第一个是要查找的项,第二个是开始的位置。
          var a = [1,2,3,4,5,4,3,2,1]
      console.log(a.indexOf(4));//
      console.log(a.lastIndexOf(4));//
    8. 迭代方法forEach()、some()、map()、filter()、every()
      这些方法都接受两个参数,第一个是一个将要被调用的函数,第二个参数是可选的,如果有第一个函数会作为该参数的方法调用。传入的函数有三个参数,数组元素、元素索引、数组本身

      forEach是对每个项调用函数,没有返回值。且不能用break提前结束。
      map对每个项调用函数,返回函数返回值组成的数组。
      filter对每个项调用函数,返回使函数返回值为true的项组成的数组。该方法会跳过空元素。
      every对每个项调用函数,如果每个返回值都为true才返回true。
      some对每个项调用函数,如果每个返回值都为false才返回false。

    9. 归并函数reduce(),reduceRight()
      这些方法都接受两个参数,第一个是一个将要被调用的函数,第二个参数是可选的,是传递个函数的初始值。传入的函数有四个参数,上一次归并结果、数组元素、元素索引、数组本身。
      reduce会从第一个项开始调用函数,函数返回值作为第一个参数传给下一次函数调用,以此类推,直到最后,返回一个最后的值作为返回值。
      var a = [];
      for(var i = 1; i <= 100; i++){
      a[i-1] = i;
      }
      var resule = a.reduce(function(last, value, i, arr){
      return last + value
      })
      console.log(resule)//

javascript数组总结的更多相关文章

  1. Javascript数组操作

    使用JS也算有段时日,然对于数组的使用,总局限于很初级水平,且每每使用总要查下API,或者写个小Demo测试下才算放心,一来二去,浪费不少时间:思虑下,堪能如此继续之?当狠心深学下方是正道. 原文链接 ...

  2. Javascript数组操作(转)

    1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限, ...

  3. JavaScript 数组

    JavaScript 数组 简介:数组是值的有序集合,JavaScript在同一个数组中可以存放多种类型的元素,而且是长度也是可以动态调整的,可以随着数据增加或减少自动对数组长度做更改. 一:创建数组 ...

  4. 也谈面试必备问题之 JavaScript 数组去重

    Why underscore (觉得这部分眼熟的可以直接跳到下一段了...) 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. ...

  5. js 判断数组包含某值的方法 和 javascript数组扩展indexOf()方法

    var  questionId = []; var anSwerIdValue = []; ////javascript数组扩展indexOf()方法 Array.prototype.indexOf ...

  6. JavaScript 数组 length 属性获取数组长度或设置数组元素的数目

    JavaScript 数组 length 属性 JavaScript 数组 length 属性可返回或设置或组中元素的数目,语法如下: array_object.length 利用 length 属性 ...

  7. 【读书笔记】-- JavaScript数组

    数组是一段线性分配的内存,它通过整数计算偏移并访问其中的元素.大多数的语言都会要求一个数组的元素是相同类型,但JavaScript数组可以包含任意类型. var misc = ['string', n ...

  8. 什么才是正确的javascript数组检测方式

    前面的话 对于确定某个对象是不是数组,一直是数组的一个经典问题.本文专门将该问题择出来,介绍什么才是正确的javascript数组检测方式 typeof 首先,使用最常用的类型检测工具——typeof ...

  9. javascript数组对象排序

    javascript数组对象排序 JavaScript数组内置排序函数 javascript内置的sort函数是多种排序算法的集合 JavaScript实现多维数组.对象数组排序,其实用的就是原生的s ...

  10. javascript数组的知识点讲解

    javascript数组的知识点讲解 阅读目录 数组的基本方法如下 concat() join() pop() push() reverse() shift() sort() splice() toS ...

随机推荐

  1. oracle查锁表

    查锁表 select LOCK_INFO.OWNER || '.' || LOCK_INFO.OBJ_NAME as OBJ_NAME, -- 对象名称(已经被锁住) LOCK_INFO.SUBOBJ ...

  2. m2014-architecture-webserver->百万记录级mysql数据库及Discuz!论坛优化

    作者:shunz,出处:http://shunz.net/2008/06/mysql_discuz_.html 最近,帮一个朋友优化一个拥有20万主题,100万帖子,3万多会员,平均在线人数2000人 ...

  3. Nutch 使用总结

    Nutch 是一个开源Java 实现的搜索引擎.它提供了我们运行自己的搜索引擎所需的全部工具.包括全文搜索和Web爬虫. Nutch使用方法简介: http://blog.csdn.net/pengp ...

  4. php学习十四:抽象,接口和多态

    多态为面向对象编程的精华所在,js等面向过程的语言虽然可以模拟面向对象,但是毕竟模仿的永远比不上真的,所以了解而且会使用面向对象的多态是必不可少的 在了解多态之前,我们必须要了解接口,但是接口又是在抽 ...

  5. UIBarButtonItem

    1.UINavigationController导航控制器如何使用 UINavigationController可以翻译为导航控制器,在IOS里经常用到. 我们看看它的如何使用: 下面的图显示了导航控 ...

  6. 日记整理---->2016-11-22

    这里记录一些关于jquery的一些知识.这里面主要是$().method方法的书写框架以及jquery中each函数的使用.等待太久得来的东西,多半已经不是当初想要的样子了. 一.基于$().meth ...

  7. java基础---->Java中枚举的使用(一)

    这里介绍一下java中关于枚举的使用. java中枚举的使用 一.枚举中可以定义方法 参照于TimeUnit的使用,TimeUnit.MILLISECONDS.sleep(1000); LoveUti ...

  8. MQTT-SN协议乱翻之功能描述

    前言 紧接上文,这是第三篇,主要是对MQTT-SN 1.2协议进行总体性功能描述. 嗯,这一部分可以结合着MQTT协议对比着来看. 网关的广播和发现 网关只能在成功连接到MQTT Server之后,才 ...

  9. Sass-学习笔记【基础篇】

    最下边附结构图 在线编辑器网址如下:http://sassmeister.com/  注意编写的时候,符号千万别用了中文的:.:.....之类的,会报错,Sass也转换不成css. less和sass ...

  10. Android 菜单动态变化【添加或去除】

    <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android: ...