特点

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

定义数组两种方法

//方法一:
var names = new Array();
//方法二:
var names = [];

获得数组的值

toString()

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

valueOf()

这个方法将输出数组

请看下面的例子:

var names = ["Tom","Jane","TabWeng"];

console.log(names.toString());
console.log(names.valueOf());
console.log(names);

运行结果:

Tom,Jane,TabWeng
Array [ "Tom", "Jane", "TabWeng" ]
Array [ "Tom", "Jane", "TabWeng" ]

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

var names = ["Tom","Jane","TabWeng"];

var showName = names.join("--");

console.log(showName);
console.log(name);

运行结果:

Tom--Jane--TabWeng
Tom,Jane,TabWeng

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

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

var names = ["Tom","Jane","TabWeng"];

var length = names.push("Michael");

console.log(names);
console.log(length);

运行结果:

Array [ "Tom", "Jane", "TabWeng", "Michael" ]
4

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

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

var names = ["Tom","Jane","TabWeng"];

var lastElement = names.pop();

console.log(names);
console.log(lastElement);

运行结果:

Array [ "Tom", "Jane" ]
TabWeng

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

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

var names = ["Tom","Jane","TabWeng"];

var firstElement = names.shift();

console.log(names);
console.log(firstElement);

运行结果:

Array [ "Jane", "TabWeng" ]
Tom

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

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

var names = ["Tom","Jane","TabWeng"];

var length = names.unshift("Michael");

console.log(names);
console.log(length);

运行结果:

Array [ "Michael", "Tom", "Jane", "TabWeng" ]
4

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

排序方法:sort()

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

var nums = [1,2,3,10,15,20];

nums.sort();
console.log(nums);

运行结果:

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

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

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

我们来看下面的例子:

var nums = [1,2,3,10,15,20];

function numCompare(num1,num2){
return num1-num2;
} nums.sort(numCompare); console.log(nums);

运行结果:

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

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

再来看一个例子:

var string = ["dddd","a","cc","bbbbbb","fffffff","eeeeeeeeee"];

string.sort();
console.log(string);

运行结果:

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

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

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

完整的例子:

var string = ["dddd","a","cc","bbbbbb","fffffff","eeeeeeeeee"];

function lengthCompare(string1,string2){
return string1.length - string2.length;
} string.sort(lengthCompare);
console.log(string);

运行结果:

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

数组倒置:reverse()

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

运行结果:

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

组合数组:concat()

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

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

运行结果:

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

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

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

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

运行结果:

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

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

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

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

运行结果:

Array [ "blue", "yellow" ]

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

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

splice()接受三个参数:

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

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

看下面的例子:

删除操作

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

运行结果:

Array [ "red", "green", "skyblue" ]
Array [ "blue", "yellow" ]

插入操作

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

运行结果:

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

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

替换操作

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

var colors = ["red","blue","yellow","green","skyblue"];

colors.splice(0,1,"6");

console.log(colors);

运行结果:

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

把第一个 red 替换成 6。

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

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

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

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

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

运行结果:

indexOf:3
lastIndexOf:3

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

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

运行结果:

indexOf:1
lastIndexOf:4

迭代方法

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

function(item,index,array){

}

every()

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

var nums = [1,2,3,4,5,6,7,8,9];

var result = nums.every(function(item,index,array){
return (item > 3);
}); console.log(result);

运行结果:

result

some()

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

var nums = [1,2,3,4,5,6,7,8,9];

var result = nums.some(function(item,index,array){
return (item > 3);
}); console.log(result);

运行结果:

true

filter()

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

var nums = [1,2,3,4,5,6,7,8,9];

var result = nums.filter(function(item,index,array){
return (item > 3);
}); console.log(result);

运行结果:

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

map()

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

var nums = [1,2,3,4,5,6,7,8,9];

var result = nums.map(function(item,index,array){
return (item > 3);
}); console.log(result);

运行结果:

Array [ false, false, false, true, true, true, true, true, true ]

再看一个例子:

var nums = [1,2,3,4,5,6,7,8,9];

var result = nums.map(function(item,index,array){
return item*2;
}); console.log(result);

运行结果:

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

forEach()

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

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

运行结果:

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

归并方法

reduce()

var nums = [1,2,3,4,5,6,7,8,9];

var result = nums.reduce(function(prev,cur,index,array){
return (prev + cur);
}) console.log(result);

运行结果:

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. WPF 仪表盘 刻度盘 动态 加载中 开源

    1. 表盘 参数可以设置, codeproject上写的.网址在这里. 源码里有demo,很详细. 源码在这里. 2. 动态Loading 截图效果跟实际有点不一样. 自己把源码写成 资源就好用了呗 ...

  2. 项目 XXX 的 NuGet 程序包还原失败:找不到“xxx”版本的程序包“xxx”

    项目 XXX 的 NuGet 程序包还原失败:找不到“xxx”版本的程序包“xxx” 编译新下载的代码出错 修改包管理器的源为 http://www.nuget.org/api/v2/ .重试后成功 ...

  3. Python之路----------生成器

    一.列表生成式 想想如何创建一个列表[0,1,2,3,4,5] l = [0,1,2,3,4,5] 如果上面的列表元素足够多的话,是不是会写很多代码?看看列表生成式怎么写 #列表生成式 l = [x ...

  4. Html5三维全景

    先看DEMO:http://think.weiyingjia.cn/liuming/quanjing/out.html 准备: 1.一张或多张全景图片素材    2.pano2VR软件,链接:http ...

  5. .NET client connection Limit

    调试出了一个诡异的问题,使用多个进程没问题,单进程出现了. fix: //默认限制为2个连接 //public const int DefaultPersistentConnectionLimit = ...

  6. Life Cycle of Thread – Understanding Thread States in Java

    Life Cycle of Thread – Understanding Thread States in Java 深入理解java线程生命周期. Understanding Life Cycle ...

  7. jquery cdn/////////////////zzz

    jquery-2.1.1 注:jquery-2.0以上版本不再支持IE 6/7/8)百度引用地址 (推荐目前最稳定的,不会出现延时打不开情况) 百度压缩版引用地址:<script src=&qu ...

  8. 夺命雷公狗-----React_native---3---react-native-cli的安装

    我们用npm安装下react-native-cli,并用-g来全局安装,我们用命令 npm install -g react-native-cli 如果和下图一样即表示已安装成功:

  9. git 学习笔记

    1.创建git仓库 git init 2.添加文件 git add readme.txt 3.修改文件 git add readme.txt 4.提交修改 git commit -m "提交 ...

  10. Oracle数据库学习笔记

    创建表的同时插入数据:create table zhang3 as select * from zhang1;create table zhang3(id,name) as select * from ...