javascript高级编程-Array引用类型用法总结

 2016-09-17   |    357

引用类型-Array类型

引用类型是一种数据结构,用于将数据和功能联系起来。

创建对象的方式:

1.new操作符

var array=new Array();

2.字面量表示法创建

var array=[];

Array

  1. 检测数组:检测数组是基本类型还是引用类型

  2. 转换方法:将数组转换成字符串或数组对象

  3. 栈方法:后进先出的操作数组的方法

  4. 队列方法:先进先出的操作数组的方法

  5. 操作方法:数组的拼接、截取、插入、删除、替换

  6. 位置方法:查找数组项、返回索引值

  7. 迭代方法:对每个数组项进行操作的方法

  8. 缩小方法:操作数组的每一项,构建最终的返回值

1 检测数组

检测数组的方法;instanceof操作符的问题是当开发环境引入多个框架存在多个全局环境的时候,会出现不同的Array构造函数,进而出现不同的结果。
Array.isArray()这个方法很好的解决了这个问题。

  • arrName instanceof Array

    var array=[1,2,3];
    console.log(array instanceof Array) //true
  • Array.isArray(arrName)

    console.log(Array.isArray(array)) //true

2 转换方法

  • toString():返回以逗号分隔拼接而成的字符串
  • valueOf():返回对象
  • toLocaleString():区别很小,如果是数组调用这个方法,那么数组的每一项都会调用这个方法
  • alert(value)==alert(value.toString())

    var array=[1,2,3];
    
    var arrayToString=array.toString();
    var arrayValueOf=array.valueOf();
    var arrayToLocalString=array.toLocaleString(); console.log(arrayToString);// 1,2,3
    console.log(arrayValueOf);//[1, 2, 3]
    console.log(arrayToLocalString);//1,2,3

3 栈方法 (LIFO:last in first out)

ES数组类似于数据结构的方法
栈是一种限制插入和删除项的数据结构

  • push():接收任意数量的参数添加至数组尾部,返回数组长度值
  • pop():从数组末尾移除最后一项,减少数组的length值,返回该数组被删除的最后一项

4 队列方法 (FIFO:first in first out)

结合push()和shift()方法可以实现像队列一样使用数组
使用unshift()和pop()可以从相反的方向模拟队列

  • shift()移除并返回该数组的第一项;
  • unshift()从数组前端添加任意个参数,并返回新数组的长度

5 操作方法

  • concat()复制原数组连接新数组形成新副本;

    var arr1=['q','w','e'];
    var arr2=['h','u','o'];
    document.write(arr1.concat(arr2)); //['q','w','e','h','u','o'] *** 相当于php的array_merge($arr1,$arr2); ***
  • slice() 有一个参数时,复制参数为起始位置到末尾的副本;有两个参数时,复制两个数字中间部分的数组项;如果参数是负数,复制用数组的长度加上负数值得到的两个参数之间的数组项;

    var arr3=['h','e','l','l','o'];
    console.log(arr3.slice(1));//e,l,l,o
    console.log(arr3.slice(-4));//e,l,l,o
    arr3.slice(-4)===arr3.slice(1);//false  *数组不能直接比较*
    console.log(arr3.slice(-4)[0]===arr3.slice(1)[0]);//true
  • splice() 三个参数:分别对应起始位置,删除项的个数,替换项;通过对这三个参数的合理运用可以实现删除、插入、替换等操作。
  • //从第一项开始删除两项
    var splice_arr1=['h','e','l','l','o'];
    console.log(splice_arr1.splice(1,2))//返回的是被删除的项组成的数组["e", "l"]
    //从第二项后插入三项old
    var splice_arr2=['h','e','l','l','o'];
    var removed=splice_arr2.splice(2,0,"K","K");
    console.log(splice_arr2);//["h", "e", "K", "K", "l", "l", "o"]
    console.log(removed)//返回的是一个空数组
    //替换
    var removed=splice_arr3.splice(2,2,"P","P");
    console.log(splice_arr3);//["h", "e", "P", "P", "o"]
    console.log(removed)//返回的是被替换的值["l", "l"]

6 位置方法

返回索引值

  • indexOf() 从前往后找
  • lastIndexOf() 从后往前找

    // indexOf()  从前往后找
    // lastIndexOf() 从后往前找
    var index_arr=['h','e','l','l','o'];
    var indexOf_arr=index_arr.indexOf('l');
    console.log('原数组:',index_arr)//原数组不变
    console.log('返回值:',indexOf_arr)//返回值是第一个查到位置的索引值2 var index_arr2=['h','e','l','l','o'];
    var indexOf_arr2=index_arr2.lastIndexOf('l');
    console.log('原数组:',index_arr2)//原数组不变
    console.log('返回值:',indexOf_arr2)//返回值是第一个查到位置的索引值3

7 迭代方法

接收两个参数,一个是函数,另一个是运行该函数的作用域对象。
第一个参数函数接收三个参数 数组项的值 item,值的位置 idnex ,数组本身 array
  • every() //都是返回true则返回true

    var numbers=[1,2,3,4,5,6,7,8,9,0,9,8,7,65,5,4,33,21,1,1,23,3,4];
    var everyArr=numbers.every(function(it, index ,arr){
    if(it>9){
    return true;
    }
    })
    console.log(everyArr);///false
  • some()//有一个返回true,则返回true

    var someArr=numbers.some(function(it, index ,arr){
    return (it > 9) ;
    })
    console.log(someArr);///true
  • forEach()//没有返回值

    var numbers=[1,2,3,4,5,6,7,8,9,0,9,8,7,65,5,4,33,21,1,1,23,3,4];
    var forEachArr=numbers.forEach(function(it, index ,arr){
    var it=it*100;
    console.log(it)
    })
    //无返回值
  • filter()//返回该函数会返回true的项组成的数组,用于过滤

    var numbers=[1,2,3,4,5,6,7,8,9,0,9,8,7,65,5,4,33,21,1,1,23,3,4];
    var filterArr=numbers.filter(function(it, index ,arr){
    if(it>10){
    return it;
    }
    })
    console.log(filterArr);//[65, 33, 21, 23]
    //返回返回值组成的新数组
  • map()//返回每个函数的返回值

    var numbers=[1,2,3,4,5,6,7,8,9,0,9,8,7,65,5,4,33,21,1,1,23,3,4];
    var mapArray=numbers.map(function(it, index ,arr){
    var it=it*100;
    return it;
    })
    console.log(mapArray)
    //[100, 200, 300, 400, 500, 600, 700, 800, 900, 0, 900, 800, 700, 6500, 500, 400, 3300, 2100, 100, 100, 2300, 300, 400]
    //返回返回值组成的新数组

8 缩小方法

  • reduce()

    var numbers=[1,2,3,4,5,6,7,8,9,0,9,8,7,65,5,4,33,21,1,1,23,3,4];
    var allArray=numbers.reduce(function(prev,cur,index,arr){
    return (prev+cur);
    })
    console.log(allArray);//229
  • reduceRight()

    var numbers=[1,2,3,4,5,6,7,8,9,0,9,8,7,65,5,4,33,21,1,1,23,3,4];
    var allArrayRight=numbers.reduceRight(function(prev,cur,index,arr){
    return (prev+cur);
    })
    console.log(allArrayRight);//229

总结:经过这次总结和练习,觉得自己在以后再次遇到操作数组应该不会再感到害怕了;
自己的工作中用的最多的是split()这个字符串截取的操作方法,这个方法虽然是字符串的方法但是很好用。
这种总结方式,效果挺好,就是效率稍微低一点,这点咋解决啊,是个问题。。。

 
 
 
 

javascript array类型用法的更多相关文章

  1. JavaScript Array 类型

    除 Object类型外,Array 类型算是ECMAScript中最常用的类型了,而且,ECMAScript中的数组和其他多数语言的数组有着非常大的差别,虽然这些数组都是数据的有序列表,但与其他语言不 ...

  2. javascript Array类型 方法大全

    1,创建数组 //第一种是使用Array构造函数 var colors = new Array(); var colors = new Array(20); //创建length为20的数组 var ...

  3. 从头开始学JavaScript (十二)——Array类型

    原文:从头开始学JavaScript (十二)--Array类型 一.数组的创建 注:ECMAscript数组的每一项都可以保存任何类型的数据 1.1Array构造函数 var colors = ne ...

  4. 《JavaScript高级程序设计》读书笔记 ---Array 类型

    除了Object 之外,Array 类型恐怕是ECMAScript 中最常用的类型了.而且,ECMAScript 中的数组与其他多数语言中的数组有着相当大的区别.虽然ECMAScript 数组与其他语 ...

  5. JavaScript入门之数组:Array类型详解

    数组应该是每个语言中都用得极度频繁的数据类型,JavaScript也不例外. 个人认为,Js中的Array类型非常强大. 首先没有C/C++等语言需要在数组初始化时指定数组长度(并不可变)的要求. 也 ...

  6. JavaScript引用类型之Array类型API详解

    Array类型也是ECMASCRIPT中最常见的数据类型,而且数据的每一项可以保存任何类型的数值,而且数组的大小是可以动态调整的,可以随着数据的添加自动增长以容纳新的数据.下面,总结数据的一些常用方法 ...

  7. 理解javascript中的Array类型

    引子: 从事前端开发有段时间了,个人观点:想在前端开发这条路上走的更远,不仅要学好HTML&HTML5.CSS&CSS3,最重要的就是要学好javascript了.所以打好javasc ...

  8. 浅谈 JavaScript 中 Array 类型的方法使用

    前言:Array 类型是 JavaScript 中除了 Object 类型以外最常用的类型. 一.创建数组 JavaScript 中的数组与其他语言中的数组有着很大的区别.例如Java.PHP等语言中 ...

  9. JavaScript中判断对象是否属于Array类型的4种方法及其背后的原理与局限性

    前言 毫无疑问,Array.isArray是现如今JavaScript中判断对象是否属于Array类型的首选,但是我认为了解本文其余的方法及其背后的原理与局限性也是很有必要的,因为在JavaScrip ...

随机推荐

  1. sql分组拼接字段

    --联查select n.*,t.Name from News n join Type_News tn on n.Id=tn.NId join Types t on t.Id=tn.TId --拼接并 ...

  2. 二十三、MongoDb 数据库介绍、安装、启动和连接(非关系型数据库)

    1.数据库和文件的主要区别 1. 数据库有数据库表.行和列的概念,让我们存储操作数据更方便2. 数据库提供了非常方便的接口,可以让 nodejs.php java .net 很方便的实现增加修改删除功 ...

  3. vue.js 知识点(二)

    关于vue看到有很多的知识点和react有很多相近的地方,比如说路由还有一些简单的运用,但是又有一些不同,比如格式.还有写法的一些不同! 所以在这里我总结一下关于vue 关于路由的一些运用: 路由: ...

  4. CodeForces - 396C On Changing Tree(树状数组)

    题目大意 给定一棵以1为根的树,初始时所有点为0 给出树的方式是从节点2开始给出每一个点的父亲 然后是 $m$ 次操作,分为两种 $1 v,k,x$ 表示在以v为根的子树中的每一个点上添加 $x-i* ...

  5. Codeforces 464E. The Classic Problem

    题目大意 给定一张$n$个点, $m$条边的无向图,求$S$ 到$T$的最短路,其中边权都是$2^k$的形式$n,m,k<=10^5$,结果对$10^9+7$取模 题解 大佬好厉害 跑一边dij ...

  6. ArchLinux 下 OpenSSH 高级运用

    00x0.相关介绍 OpenSSH(OpenBSD Secure Shell)使用 SSH 通过计算机网络加密通信的实现. 它是替换由 SSH Communications Security 所提供的 ...

  7. String 源码浅析(一)

    前言 相信作为 JAVAER,平时编码时使用最多的必然是 String 字符串,而相信应该存在不少人对于 String 的 api 很熟悉了,但没有看过其源码实现,其实我个人觉得对于 api 的使用, ...

  8. Elasticsearch 因拷贝多余的jar到lib库导致无法启动的问题

    因为需要测试,无意中拷贝了一个netty-buffer-4.1.16.Final.jar包放到es的lib目录下,晚上回家启动es的时候发现启动不起来了.检查日志发现如下错误. 其中有一句关键语句 C ...

  9. 亿级 Elasticsearch 性能优化

    前言 最近一年使用 Elasticsearch 完成亿级别日志搜索平台「ELK」,亿级别的分布式跟踪系统.在设计这些系统的过程中,底层都是采用 Elasticsearch 来做数据的存储,并且数据量都 ...

  10. abp部署端口和域名映射配置

    前引 apb部署 后端服务9900端口,域名访问地址是:http://nihao-api.hellow.com: 前端4200端口,域名访问地址是:http://nihao.hellow.com: 前 ...