数组是所有高级语言都会有的东西,数组是JS中使用最多的类型之一,所以掌握JS中数组的用法相当有帮助:

由于JS是一门弱类型的语言,所以数组里面可以放各种不同的数据类型,比如

var a = [1993, 'ldz', true]

JS里面数组的大小时可以动态调整的,所以随着数据的添加,数组的长度会自动的增长

创建数组有两种方式

1. 使用Array构造方法,下面的几种都是合法的

var arr1 = new Array();  //创建一个空数组
var arr2 = new Array(20); //创建一个length为20的空数组,每一项的值为 undefined
var arr2 = new Array('ldz'); //创建一个只包含一个'ldz'字符串的数组,注意这里的参数不是一个数字,所以认为是数组中的某一个项,而不是长度
var arr3 = new Array(1993, 'ldz', true); //创建一个包含3个元素的数组

2. 使用字面量的方式

var arr1 = []; // 创建一个空数组对象
var arr2 = ['ldz']; // 创建一个有一个字符串元素的数组对象
var arr3 = [1, 2, ]; // 不要这么用,在ie8之前的浏览器中的数组长度是3,在其它浏览器中长度是2
var arr4 = [, , , ]; // 不要这么用,在ie8之前的浏览器中的数组长度是4,在其它浏览器中长度是3

数组的基本操作

可以通过下标表达式来获取和设置数组中的值

var colors = ['red', 'green', 'blue'];
console.log(colors[0]); // 获取索引值为0的值 red
colors[1] = 'black'; // 设置索引为1的值
console.log(colors[1]); // black
console.log(colors[4]); //数组越界,返回 undefined

每个数组对象都会有一个length属性,代表这个数组中有多少个元素,这个length很有特点,它不是只读的,我们可以动态的修改它,用来伸缩数组的大小

var colors = ['red', 'green', 'blue'];
var names = [];
console.log(colors.length); //
console.log(names.length);//
colors.length = 2; // 将colors数组的大小改为2
console.log(colors); // red, green

当我们为一个数组的某个索引上设置值,而这个索引值已经超出了数组的长度,那么,数组会重新计算其长度值,如:

var colors = ['red', 'green', 'blue'];
colors[10] = 'black';
console.log(colors.length); //
console.log(colors); // ["red", "green", "blue", undefined × 7, "black"]

如何检测一个对象是不是数组,我们可以用 obj instanceof Array 来进行检测,但是这样会有一些问题,比如存在多个全局作用域(像一个页面包含多个 frame),那么,这个检测方法就失效了(Array是window的属性)

另外一个解决方案是使用Array.isArray(obj)方法,但是这个方法在IE8和以前都不支持

所以有一个解决办法,我们知道,在任何值上调用Object原声的toString方法,都会返回一个[object NativeConstructorName]格式的字符串,举个例子:

console.log(Object.prototype.toString.call([]));  // [object Array]

由于原生数组的构造函数名与全局作用域无关,因此使用 toString()就能保证返回一致的值。利用这一点,可以创建一下方法:

function isArray(value){
return Object.prototype.toString.call(value) == "[object Array]";
}

数组操作方法

join(seprator)

把数组的所有元素放入一个字符串。元素通过指定的分隔符(默认为一个逗号)进行分隔。返回一个字符串

var colors = ['red', 'green', 'blue'];
console.log(colors.join()); // red,green,blue
console.log(colors.join('|')); // red|green|blue

栈方法 push(ele), pop

push是向数组的末尾添加一个或更多元素,并返回新的长度。

pop是删除并返回数组的最后一个元素,长度减一;如果数组已经为空,则 pop() 不改变数组,并返回 undefined 值

var colors= ['red', 'green', 'blue'];
console.log(colors.pop()); // blue
console.log(colors.pop()); // green
console.log(colors.length); //
console.log(colors.push('black')); //
console.log(colors.pop()); // black
console.log(colors.pop()); // red
console.log(colors.pop()); // undefined

反向栈方法 shift, unshift

与pop, push相反,shift删除并返回数组的第一个元素,unshift向数组的开头添加一个或更多元素,并返回新的长度。

var colors= ['red', 'green', 'blue'];
console.log(colors.shift()); // red
console.log(colors.shift()); // green
console.log(colors.length); //
console.log(colors.unshift('black')); //
console.log(colors.shift()); // black
console.log(colors.shift()); // blue
console.log(colors.shift()); // undefined

我们可以利用 shift和push来实现一个队列

concat(arr1, arr2, ...)

连接两个或更多的数组,返回一个新的数组。参数可以是具体的值,也可以是数组如果要进行 concat() 操作的参数是数组,那么添加的是数组中的元素,而不是数组。

var colors = ['red', 'green', 'blue'];
var colors2 = ['gray', 'black'];
console.log(colors.concat(colors2)); // ["red", "green", "blue", "gray", "black"]
console.log(colors.concat(colors2, 'white')); // ["red", "green", "blue", "gray", "black", "white"]
console.log(colors.concat(colors2, colors2)); // ["red", "green", "blue", "gray", "black", "gray", "black"]

排序方法 reverse 和 sort

reverse用于反转并返回数组, 该方法会改变原来的数组,而不会创建新的数组。

var colors = ['red', 'green', 'blue'];
var reversed = colors.reverse();
console.log(reversed); // ["blue", "green", "red"]
console.log(colors); // ["blue", "green", "red"]

sort(sortby) 方法用于对数组的元素进行排序。该方法会改变原来的数组,而不会创建新的数组。

如果sortby没有定义,则对于数组中的所有元素会先转成字符串,然后再按照字母顺序排序

对于排序规则方法 sortby,有以下规则:

方法有两个参数,就是要比较的两个元素 function(a, b){}

  • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
  • 若 a 等于 b,则返回 0。
  • 若 a 大于 b,则返回一个大于 0 的值。
var arr1 = [1, 2, 3, 11, 4];
arr1.sort(); // [1, 11, 2, 3, 4]
console.log(arr1);
arr1.sort(function(a, b){
return a - b; // 若a > b 则返回大于0的值
})
console.log(arr1); // [1, 2, 3, 4, 11]

slice(start, end)

创建一个新的数组,从已有的数组中返回选定的元素,[start, end)

参数 描述
start 必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
end 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。
var colors = ["red", "green", "blue", "yellow", "purple"];
var colors2 = colors.slice(1);
var colors3 = colors.slice(1,4);
console.log(colors2); // ["green", "blue", "yellow", "purple"]
console.log(colors3); // ["green", "blue", "yellow"]

splice

最强大的数组方法,该方法会改变原始数组;

它有很多种用法。

splice()的主要用途是向数组的中部插入项,但使用这种方法的方式则有如下 3 种。

1. 删除,可以删除任意数量的项,只需指定 2 个参数:要删除的第一项的位置和要删除的项数。

var arr1 = [1, 2, 3, 4, 5];
arr1.splice(1, 2); 删除2和3
console.log(arr1); // [1, 4, 5]

2. 插入,可以向指定位置插入任意数量的项,只需提供 3 个参数:起始位置、 0(要删除的项数)和要插入的项。

var arr1 = [1, 2, 3, 4, 5];
arr1.splice(1, 0, 'a'); // 在索引为1的位置插入 'a'
console.log(arr1); // [1, "a", 2, 3, 4, 5]

3. 替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定 3 个参数:起始位置、要删除的项数和要插入的任意数量的项。

var arr1 = [1, 2, 3, 4, 5];
arr1.splice(1, 1, 'a'); // 在索引为1的位置提换为 'a'
console.log(arr1); // [1, "a", 3, 4, 5]

可以批量的

var arr1 = [1, 2, 3, 4, 5];
arr1.splice(0, 5, 'a', 'b', 'c', 'd', 'e');
console.log(arr1); // ["a", "b", "c", "d", "e"]

所以,我们可以理解这个定义

语法

arrayObject.splice(index,howmany,item1,.....,itemX)
参数 描述
index 必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
howmany 必需。要删除的项目数量。如果设置为 0,则不会删除项目。
item1, ..., itemX 可选。向数组添加的新项目。

返回值

类型 描述
Array 包含被删除项目的新数组,如果有的话。

说明

splice() 方法可删除从 index 处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。

如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。

indexOf, lastIndexOf

查找元素的位置

var colors = ["red", "green", "blue", "yellow", "purple", "green"];
console.log(colors.indexOf('green')); //
console.log(colors.lastIndexOf('green')); // 5,从后往前找到第一个

遍历方法

ES5定义了 5个迭代方法(支持IE9+和其他浏览器),遍历数组,为每个元素调用回调方法进行处理

every(function(item, index, array){}),如果每一项都返回true,则返回true

some(function(item, index, array){}),如果任意一项返回true,则返回true

filter(function(item, index, array){}), 返回 回调方法返回true的项的集合

forEach(function(item, index, array){}),没有返回值

map(function(item, index, array){}),返回每次函数调用的结果组成的数组

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

  1. JavaScript中数组操作常用方法

    JavaScript中数组操作常用方法 1.检测数组 1)检测对象是否为数组,使用instanceof 操作符 if(value instanceof Array) { //对数组执行某些操作 } 2 ...

  2. javascript中数组Array的方法

    一.常用方法(push,pop,unshift,shift,join)push pop栈方法,后进先出var a =[1,2,3];console.log(a.push(40)); //4 返回数组的 ...

  3. Javascript中数组

    Javascript中数组 1.什么是数组 所谓的数组就是一组数据的集合,在内存中表现为一段连续的内存地址(保存在堆内存) 2.创建数组的含义 创建数组的目的:就是为了保存更多的数据 3.数组的定义 ...

  4. javascript中数组常用方法总结

    原文:javascript中数组常用方法总结 在javascript的基础编程中,数组是我们最常遇到的,那么数组的一些常用方法也是我们必须要掌握的,下面我们总结一下数组中常用的方法. toString ...

  5. JavaScript中数组Array方法详解

    ECMAScript 3在Array.prototype中定义了一些很有用的操作数组的函数,这意味着这些函数作为任何数组的方法都是可用的. 1.Array.join()方法 Array.join()方 ...

  6. javascript中数组的常用算法深入分析

    Array数组是Javascript构成的一个重要的部分,它可以用来存储字符串.对象.函数.Number,它是非常强大的.因此深入了解Array是前端必修的功课.本文将给大家详细介绍了javascri ...

  7. javascript中数组化的一般见解

    javascript中数组化的一般见解,数组化浏览器中存在许多类数组对象,往往对类数组操作比较麻烦,没有数组那些非常方便的方法,在这种情况下,就有了数组化方法. 数组化的一般方法 1.第一种也是我们最 ...

  8. 总结Javascript中数组各种去重的方法

    相信大家都知道网上关于Javascript中数组去重的方法很多,这篇文章给大家总结Javascript中数组各种去重的方法,相信本文对大家学习和使用Javascript具有一定的参考借鉴价值,有需要的 ...

  9. JavaScript中数组常用方法的总结

    JavaScript中数组Array常用的方法总结 标签(空格分隔): JavaScript ECMAScript数组给我们提供了许多常用的方法,便于我们对数组进行操作,下面,就来总结一下这些方法. ...

  10. JavaScript中数组Array.sort()排序方法详解

    JavaScript中数组的sort()方法主要用于对数组的元素进行排序.其中,sort()方法有一个可选参数.但是,此参数必须是函数. 数组在调用sort()方法时,如果没有传参将按字母顺序(字符编 ...

随机推荐

  1. Crane (POJ 2991)

    //线段树 延迟标签 // #include <bits/stdc++.h> using namespace std; const int maxn=1e4+5; double x[max ...

  2. 自定义Log 写到文件中

    using System; using System.Collections.Generic; using System.Web; using System.IO; using System.Text ...

  3. Python学习笔记4基本数据类型续

    start  16:36 时间格式化 程序计时:指测量起止动作所经历的时间的过程 实例四文本进度条 #a表示星号被复制的的次数 文本进度条的动态刷新 实现刷新功能的简单代码,但你会发现并没有实现在同一 ...

  4. 【转载】在linux下别用zip 用tar来压缩文件 zip解压后还是utf-8 window10是GBK

    3.2 使用 unzip 命令解压缩 zip 文件 将 shiyanlou.zip 解压到当前目录:   $ unzip shiyanlou.zip 使用安静模式,将文件解压到指定目录:   $ un ...

  5. promise之我见

    在我们平时的方法中有很多方法是promise封装的, 有些函数后边跟的then和catch 就是promise的方法,先看一下pormise的特点 (1)对象的状态不受外界影响.Promise对象代表 ...

  6. 51-python3 pandas读写excel

    转载自:https://blog.csdn.net/brink_compiling/article/details/76890198?locationNum=7&fps=1 0. 前言Pyth ...

  7. Jenkins+docker自动部署

    项目目录结构如下 对此项目,使用Jenkins构建dockers镜像 步骤如下: 1.安装Jenkins和docker,具体安装步骤,自行度娘把,在此不详述了. 2.Jenkins安装插件Gradle ...

  8. [转]JSOUP 抓取HTTPS/HTTP网页,校验问题

    针对一般的http请求是不需要的校验的.但是https安全校验过总过不去.最后找到以下方法,终于成功. 让我们的站点信任所有站点,不需要引包,系统自带ssl证书校验,话不多数,贴代码. /** * 信 ...

  9. AX2009 批处理作业中使用多线程---顶级采摘

    顶级采摘 是前两种模式的一种混合,使用使用实体表存储单任务模式那样的每个工单,任务每次都取顶行做操作.单任务数不想单任务模式,一个工单一个任务.而是类似批量捆绑那样设置任务数.表:demoTopPic ...

  10. Dockerfile制作自定义镜像

    本文介绍最精简的Dockerfile文件构建镜像,Docker启动的时候可以启动一个shell脚本 1.首先编写Dockerfile文件 说明 1.启动的这个shell脚本一定是不退出的,比如服务器的 ...