特点

  • 动态长度
  • 一个数组里面的元素可以是不同类型
  • 数组的length属性不是只读属性,可通过length延长数组也可以删减数组的长度

定义数组两种方法

  1. //方法一:
  2. var names = new Array();
  3. //方法二:
  4. var names = [];

获得数组的值

toString()

这个方法将输出一个字符串,数组的元素之间用逗号分隔

valueOf()

这个方法将输出数组

请看下面的例子:

  1. var names = ["Tom","Jane","TabWeng"];
  2. console.log(names.toString());
  3. console.log(names.valueOf());
  4. console.log(names);

运行结果:

  1. Tom,Jane,TabWeng
  2. Array [ "Tom", "Jane", "TabWeng" ]
  3. Array [ "Tom", "Jane", "TabWeng" ]

数组元素间分隔符设置 : join()

  1. var names = ["Tom","Jane","TabWeng"];
  2. var showName = names.join("--");
  3. console.log(showName);
  4. console.log(name);

运行结果:

  1. Tom--Jane--TabWeng
  2. Tom,Jane,TabWeng

join方法生成的是一个字符串,且不影响原来的数组。

向数组尾部添加元素:push()

  1. var names = ["Tom","Jane","TabWeng"];
  2. var length = names.push("Michael");
  3. console.log(names);
  4. console.log(length);

运行结果:

  1. Array [ "Tom", "Jane", "TabWeng", "Michael" ]
  2. 4

push()向数组尾部添加一个元素并返回数组的长度。

取出数组尾部的元素:pop()

  1. var names = ["Tom","Jane","TabWeng"];
  2. var lastElement = names.pop();
  3. console.log(names);
  4. console.log(lastElement);

运行结果:

  1. Array [ "Tom", "Jane" ]
  2. TabWeng

push()和pop() 组合即可实现栈方法,即在数组中先进后出。

取出数组头部的元素:shift()

  1. var names = ["Tom","Jane","TabWeng"];
  2. var firstElement = names.shift();
  3. console.log(names);
  4. console.log(firstElement);

运行结果:

  1. Array [ "Jane", "TabWeng" ]
  2. Tom

push()向数组尾部添加元素,shift()从数组头部取出元素,所以这两个方法结合,可实现队列方法, 先进先出。

从数组头部添加元素:unshift()

  1. var names = ["Tom","Jane","TabWeng"];
  2. var length = names.unshift("Michael");
  3. console.log(names);
  4. console.log(length);

运行结果:

  1. Array [ "Michael", "Tom", "Jane", "TabWeng" ]
  2. 4

pop()和unshift() 结合可实现栈方法的反过程

排序方法:sort()

注意sort()方法会改变原来数组的元素排序

  1. var nums = [1,2,3,10,15,20];
  2. nums.sort();
  3. console.log(nums);

运行结果:

  1. Array [ 1, 10, 15, 2, 20, 3 ]

因为sort()是按字符来排序的,所以这个结果是正确的。我们可以自定义排序的方式。sort()可以传入一个函数作为参数,在函数里面定义规则,方法如下(步骤):

  1. 明确排序规则(比如是按数字的从小到大排序,还是按字符串长度排序)
  2. 对于函数中传入的两个参数,编写比较方法,使返回负数时第一个参数排在第二个参数前,返回正数时,第一个参数将排在第二个参数后面

我们来看下面的例子:

  1. var nums = [1,2,3,10,15,20];
  2. function numCompare(num1,num2){
  3. return num1-num2;
  4. }
  5. nums.sort(numCompare);
  6. console.log(nums);

运行结果:

  1. Array [ 1, 2, 3, 10, 15, 20 ]

注意numCompare() 函数里面的return num1-num2

再来看一个例子:

  1. var string = ["dddd","a","cc","bbbbbb","fffffff","eeeeeeeeee"];
  2. string.sort();
  3. console.log(string);

运行结果:

  1. Array [ "a", "bbbbbb", "cc", "dddd", "eeeeeeeeee", "fffffff" ]

默认是按照字母的顺序进行排序,如果我们要按字符串的长度进行排序,可以写这样的函数:

  1. function lengthCompare(string1,string2){
  2. return string1.length - string2.length;
  3. }

完整的例子:

  1. var string = ["dddd","a","cc","bbbbbb","fffffff","eeeeeeeeee"];
  2. function lengthCompare(string1,string2){
  3. return string1.length - string2.length;
  4. }
  5. string.sort(lengthCompare);
  6. console.log(string);

运行结果:

  1. Array [ "a", "cc", "dddd", "bbbbbb", "fffffff", "eeeeeeeeee" ]

数组倒置:reverse()

  1. var nums = [1,2,3,4,5,6,7,8];
  2. nums.reverse();
  3. console.log(nums);

运行结果:

  1. Array [ 8, 7, 6, 5, 4, 3, 2, 1 ]

组合数组:concat()

concat() 不会对原有数组产生影响

  1. var names = ["TabWeng","Jane"];
  2. var nums = [1,2,3];
  3. var array = names.concat(nums);
  4. console.log(array);
  5. console.log(names);
  6. console.log(nums);

运行结果:

  1. Array [ "TabWeng", "Jane", 1, 2, 3 ]
  2. Array [ "TabWeng", "Jane" ]
  3. Array [ 1, 2, 3 ]

通过concat()把nums组合到names的尾部,把生成的新数组赋值给变量array,原来的数组不变。

concat()也可以接受多个参数,看下面的例子理解:

  1. var names = ["TabWeng","Jane"];
  2. var nums = [1,2,3];
  3. var array = names.concat("你好!",nums);
  4. console.log(array);

运行结果:

  1. Array [ "TabWeng", "Jane", "你好!", 1, 2, 3 ]

获取数组片段组成新数组:slice()

slice()接受两个参数,分别是开始位置和结束位置,元素从1开始算起,slice()将数组从开始位置截取到结束位置,并返回截取的数组。在截取过程中,不包括开始位置的元素,但包括结束位置的元素。请看下面的例子理解:

  1. var colors = ["red","blue","yellow","green","skyblue"];
  2. var otherColors = colors.slice(1,3);
  3. console.log(otherColors);

运行结果:

  1. Array [ "blue", "yellow" ]

如果只传入一个参数,那么默认为开始位置的参数,将从这个位置后到结尾截取数组。读者可以试试slice(0)和slice(1)的结果。

强大的操作数组方法:splice()

splice()接受三个参数:

  • 第一个参数:操作开始的位置
  • 第二个参数:要删除的元素个数,从操作开始位置之后算起,如果个数为0,那么表示不删除
  • 第三个参数:要添加的元素(可多个),在执行删除操作之后进行添加,如果删除的个数是零,那么意味着只添加

splice()是原地修改数组,修改后数组就变化。该方法返回的是删除后的元素。如果没有删除,则返回空数组。

看下面的例子:

删除操作

  1. var colors = ["red","blue","yellow","green","skyblue"];
  2. var removes = colors.splice(1,2);
  3. console.log(colors);
  4. console.log(removes);

运行结果:

  1. Array [ "red", "green", "skyblue" ]
  2. Array [ "blue", "yellow" ]

插入操作

  1. var colors = ["red","blue","yellow","green","skyblue"];
  2. colors.splice(3,0,"6","6");
  3. console.log(colors);

运行结果:

  1. Array [ "red", "blue", "yellow", "6", "6", "green", "skyblue" ]

只插入的操作,即把第二个参数设为0,表示不删除。

替换操作

替换操作就是删除的个数和添加的个数相等,这样就替换了。

  1. var colors = ["red","blue","yellow","green","skyblue"];
  2. colors.splice(0,1,"6");
  3. console.log(colors);

运行结果:

  1. Array [ "6", "blue", "yellow", "green", "skyblue" ]

把第一个 red 替换成 6。

获得数组元素的位置:indexOf()

indexOf()从左向右(正序)查找,从0开始编号。

lastIndexOf()从右到左(逆序)查找,从0开始编号。

查找到之后就不再查找,返回被查找元素在数组中的值。

  1. var names = ["TabWeng","Tom","Jane","Tab","Michael"];
  2. var position = names.indexOf("Tab");
  3. var lastPosition = names.lastIndexOf("Tab");
  4. console.log("indexOf:"+position);
  5. console.log("lastIndexOf:"+lastPosition);

运行结果:

  1. indexOf:3
  2. lastIndexOf:3

它们的位置都是3,虽然他们查找的方向不同,但是编号都是从左向右编号,这里面只有一个Tab,所以编号就都相同。看下面的例子可以看出差异:

  1. var names = ["TabWeng","Tab","Tom","Jane","Tab","Michael"];
  2. var position = names.indexOf("Tab");
  3. var lastPosition = names.lastIndexOf("Tab");
  4. console.log("indexOf:"+position);
  5. console.log("lastIndexOf:"+lastPosition);

运行结果:

  1. indexOf:1
  2. lastIndexOf:4

迭代方法

每个迭代方法都要传入一个这样的函数:

  1. function(item,index,array){
  2. }

every()

返回布尔值,只有都满足函数里的条件,才返回true。

  1. var nums = [1,2,3,4,5,6,7,8,9];
  2. var result = nums.every(function(item,index,array){
  3. return (item > 3);
  4. });
  5. console.log(result);

运行结果:

  1. result

some()

返回布尔值,只要有一个满足条件,就返回true。

  1. var nums = [1,2,3,4,5,6,7,8,9];
  2. var result = nums.some(function(item,index,array){
  3. return (item > 3);
  4. });
  5. console.log(result);

运行结果:

  1. true

filter()

返回一个数组,返回的数组的元素都为满足条件的元素。

  1. var nums = [1,2,3,4,5,6,7,8,9];
  2. var result = nums.filter(function(item,index,array){
  3. return (item > 3);
  4. });
  5. console.log(result);

运行结果:

  1. Array [ 4, 5, 6, 7, 8, 9 ]

map()

返回一个数组,返回的数组是通过函数规则操作后的数组。

  1. var nums = [1,2,3,4,5,6,7,8,9];
  2. var result = nums.map(function(item,index,array){
  3. return (item > 3);
  4. });
  5. console.log(result);

运行结果:

  1. Array [ false, false, false, true, true, true, true, true, true ]

再看一个例子:

  1. var nums = [1,2,3,4,5,6,7,8,9];
  2. var result = nums.map(function(item,index,array){
  3. return item*2;
  4. });
  5. console.log(result);

运行结果:

  1. Array [ 2, 4, 6, 8, 10, 12, 14, 16, 18 ]

forEach()

无返回值,对数组的每一项进行操作。

  1. var nums = [1,2,3,4,5,6,7,8,9];
  2. var otherArray = [];
  3. var result = nums.forEach(function(item,index,array){
  4. otherArray[index] = item * 2;
  5. });
  6. console.log(otherArray);

运行结果:

  1. Array [ 2, 4, 6, 8, 10, 12, 14, 16, 18 ]

归并方法

reduce()

  1. var nums = [1,2,3,4,5,6,7,8,9];
  2. var result = nums.reduce(function(prev,cur,index,array){
  3. return (prev + cur);
  4. })
  5. console.log(result);

运行结果:

  1. 45

reduceRight()

reduce()的相反方向,从右向左归并。

参考

  • 《JavaScript高级程序设计》

JavaScript数组类型的更多相关文章

  1. JavaScript中如何判断数组类型

    前言 JavaScript中关于数组的判定问题,一直都是一个必须要掌握的点,那么,运用知识,如何判断一个类型是数组,就需要有对JavaScript使用有着深入的了解. 判断方法 一.Array.isA ...

  2. JavaScript 用七种方式教你判断一个变量是否为数组类型

    JavaScript 如何判断一个变量是否为数组类型 引言 正文 方法一 方法二 方法三 方法四 方法五 方法六 方法七 结束语 引言 我们如何判断一个变量是否为数组类型呢? 今天来给大家介绍七种方式 ...

  3. JavaScript高级程序设计(十):数组类型

    先导: 访问对象属性使用的都是点表示法.另外,我们还可以使用方括号表示法来访问对象的属性.在使用方括号的时候,应该将要访问的属性以字符串的形式放到方括号中.这两种方法没有什么区别.但是方括号的优点是可 ...

  4. JavaScript中数组类型的属性和方法

    除了Object,Array类型应该是ECMAScript中最常用的类型了. ECMAScript的数组虽然也是数据的有序列表,但还是与其他语言中的数组有很大的区别.比如ECMAScript数组每一项 ...

  5. Javascript数组操作

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

  6. Javascript数组操作(转)

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

  7. JavaScript 数组

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

  8. 你所不知道的JavaScript数组

    相信每一个 javascript 学习者,都会去了解 JS 的各种基本数据类型,数组就是数据的组合,这是一个很基本也十分简单的概念,他的内容没多少,学好它也不是件难事情.但是本文着重要介绍的并不是我们 ...

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

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

随机推荐

  1. Mssql迁移至Oracle 查询优化

    针对Oracle的查询优化 a.避免使用nclob类型字段,可以通过排除此类型的字段,优化查询b.避免对字段进行NULL值判断,如:SELECT * FROM  TABLE WHERE COL IS ...

  2. Mini ORM——PetaPoco笔记

    Mini ORM--PetaPoco笔记 记录一下petapoco官网博客的一些要点.这些博客记录了PetaPoco是如何一步步改进的. 目录: Announcing PetaPoco PetaPoc ...

  3. RDIFramework.NET ━ .NET快速信息化系统开发框架 记录所有操作的Sql

    在实际开发或试运行过程中,我们有时需要查看或分析模块执行的所有sql,以便进行相关分析.有时我们可以通过数据库自带的软件抓取,如:SQL Server Profiler.在我们RDIFramework ...

  4. kali安装谷歌浏览器的方法及启动问题的解决

    在kali上安装谷歌浏览器的时候,遇到了很多问题,经过不懈努力,终于解决,现在把方法总结一下,希望对遇到同样问题的人能有一定帮助.这是给最白的小白参考的,大牛勿喷哈. 说明:我是在kali rolli ...

  5. UVALive 7146 Defeat the Enemy(贪心+STL)(2014 Asia Shanghai Regional Contest)

    Long long ago there is a strong tribe living on the earth. They always have wars and eonquer others. ...

  6. ANDROID L——Material Design详解(UI控件)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lolli ...

  7. SourceInsight阅读Python---张子芳

    首先从http://www.sourceinsight.com/public/languages/下载Python的配置文件Python.CLF ,然后对SourceInsight作如下配置: (1) ...

  8. paper 132:图像去噪算法:NL-Means和BM3D

    这篇文章写的非常好,确定要~认真~慎重~的转载了,具体请关注本文编辑作者:http://wenhuix.github.io/research/denoise.html   我不会告诉你这里的代码都是f ...

  9. select in 在postgresql的效率问题

    在知乎上看到这样一个问题: MySQL 查询 select * from table where id in (几百或几千个 id) 如何提高效率?修改 电商网站,一个商品属性表,几十万条记录,80M ...

  10. android、IOS和手机基础知识

    一.手机基础知识 1.固件.刷固件.固件版本 固件是指固化的软件,英文为firmware,它是把某个系统程序写入到特定的硬件系统中的flashROM.手机固件相当于手机的系统,刷新固件就相当于刷系统. ...