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. Spring学习(一)——环境准备

            以前做的项目都是用.net开发的,以后准备迁移到java平台上,近期正好有个新项目要上马,所以调研下java相关技术.Spring作为java平台下的一个全栈框架, 其简洁优雅的设计和 ...

  2. .net core 使用redis 基于 StackExchange.Redis

    一.添加引用包 StackExchange.Redis Microsoft.Extensions.Configuration   二.修改配置文件 appsettings.json   { " ...

  3. Spring Boot - 记录日志

    比自己写文本日志的好处 默认定义好了一些日志级别,会记录当前使用的级别以上的日志,通常线上环境设置的级别较高记得较少 有一些自动split之类的功能 Commons-logging 日志级别:TRAC ...

  4. 中文 bootstrapValidator

    官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation jQuery plugin: Validation 使用说明 转载 ...

  5. 线上 ELK 集群健康值 red 状态问题排查与解决

    之前一直运行正常的数据分析平台,最近一段时间没有注意发现日志索引数据一直未生成,大概持续了n多天,当前状态: 单台机器, Elasticsearch(下面称ES)单节点(空集群),1000+shrad ...

  6. “全栈2019”Java第八章:IntelliJ IDEA设置注释不显示在行首

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  7. php数据库编程---mysqli扩展库

    1,mysqli扩展库允许我们访问MySQL数据库,并对MySql数据库进行curd操作.Mysqli扩展库比mysql扩展库加强了. 2,mysqli扩展库和mysql扩展库的比较 (1) mysq ...

  8. io--文件内容的复制

    public class CopyTextTest_2 {  private static final int BUFFER_SIZE = 1024;  public static void main ...

  9. Beginning and Ending the Speech

    Beginning and Ending the Speech Just as musical plays need appropriate beginnings and endings, so do ...

  10. 除了ROS, 机器人定位导航还有其他方案吗?

    利用ROS进行机器人开发,我想大多数企业是想借助ROS实现机器人的导航.定位与路径规划,它的出现大大降低了机器人领域的开发门槛,开发者无需向前人一样走众多弯路,掌握多种知识才能开始实现机器人设计的梦想 ...