基于JavaScript Array数组方法(新手必看篇)

Array类型是ECMAScript中最常用的引用类型。ECMAScript中的数据与其它大多数语言中的数组有着相当大的区别。虽然ECMAScript中的数据与其它语言中的数组一样都是数据的有序列表,但不同的是,ECMAScript数组中的每一项可以保存任何类型的数据,无论是数值、字符串或者是对象。同时,ECMAScript中的数组大小是可以动态调整的,即可以根据数据的添加自动增长以容纳新增的数据。下面总结一下JavaScript中数组常用的操作函数及用法。

•创建数组

创建数组主要有构造函数和数组字面量两种方法,如下所示:

var arr = new Array();
var arr = [];

对于构造函数,我们可以传递一个数值创建包含给定项数的数组,如下:

var arr = new Array(3);  //数组长度为3

也可以直接传递存放于数组中的值,如下:

var arr = new Array("red","green","blue");

不论哪种方式,推荐使用数组字面量的形式来创建数组。

•检测数组

对于单一的全局执行环境而言,使用instanceof操作符就可以检测是否为数组,例如:

var arr = [1,2,3];
console.log(arr instanceof Array);  //true

但如果网页中包含多个框架,也就包含多个全局执行环境,ES5新增了Array.isArray()方法来确定某个值是否为数组,而不管它是在哪个全局执行环境中被创建的,如下:

if(Array.isArray(arr)){
    //执行某些操作
}

•数组字符串转换

每个对象都具有toLocaleString()、toString()和valueof()方法。调用数组的toString()方法会返回数组中每个值的字符串形式拼接而成并且以逗号分隔的字符串,调用数组的valueof()方法返回的还是数组,实际上调用的是数组每一项的toString()方法,如下:

var arr = ["red","green","blue"];
console.log(arr.toString());  //red,green,blue
console.log(arr.valueof());  //red,green,blue
console.log(arr);       //red,green,blue

而调用数组的toLocaleString()方法,与toString()不同的是它会调用数组每一项的toLocaleString()方法,将每一项toLocaleString()方法的返回值以逗号分隔拼接成一个字符串。而使用join()方法,可以使用不同的分隔符来构建这个字符串,如下:

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

•数组的添加和删除

push()方法接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改修改后数组的长度,例如:

var arr = [1,2,3];
arr.push(4,5);
console.log(arr);  //[1,2,3,4,5]

与push()相对的是pop()方法,它从数组末尾移除最后一项,并返回移除的项,例如:

var arr = [1,2,3];
arr.pop();  //3
arr.pop();  //2
console.log(arr);  //[1]

另外两个使用的方法是shift()和unshift(),它们与pop()和push()类似,shift()方法用于从数组的起始位置移除项并返回移除项,例如:

var arr = [1,2,3];
arr.shift();  //1
arr.shift();  //2
console.log(arr);  //[3]

unshift()方法与shift()用途相反,它能够在数组前端添加任意个项并返回新数组的长度,例如:

var arr = [1,2,3];
arr.unshift(4);  //返回长度4
arr.unshift(5);  //返回长度5
console.log(arr);  //[1,2,3,4,5]

•数组的翻转与排序

数组提供的翻转方法为reverse(),它会反转数据项的顺序,例如:

var arr = [1,2,3];
arr.reverse();
console.log(arr);  //[3,2,1]

sort()也可以对数组进行排序,不过它的默认排序方式并不是大小,而是根据对应字符串逐个编码排序的。sort()方法可以接收一个比较函数,进行自定义排序,例如:

function compare(value1,value2){
  return value1-value2;
}
var arr = [1,3,2,5,4];
arr.sort(compare);
console.log(arr);  //[1,2,3,4,5]

•数组连接

concat()方法会创建当前数组的一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组,原来的数组不变,例如:

var arr = [1,2,3];
var arr2 = arr.concat(4,[5,6]);
console.log(arr);  //[1,2,3]
console.log(arr2);  //[1,2,3,4,5,6]

•数组分割

slice()方法接收一个或两个参数,即要返回项的开始位置和结束位置。如果只要一个参数,则返回从指定位置开始到数组结束的所有项。如果接收两个参数,则返回起始和结束位置之间的所有项但不包括结束位置的项,例如:

var arr = [1,2,3,4,5];
var arr2 = arr.slice(1);  //[2,3,4,5]
var arr3 = arr.slice(1,3);  //[2,3]

注意,slice()方法不会影响原来的数组。

•splice()方法

由于splice()方法非常强大,因此单独拿出来总结一下,它可以接收三个参数,第一个参数表示添加或删除项目的位置,第二个参数表示要删除的项目数量,第二个参数表示向数组中添加的新项目(可选),通过提供不同的参数可以实现删除、插入和替换等功能,例如:

var arr = [1,2,3,4,5];
arr.splice(2,0,11,22);  //从位置2插入两项,没有删除
console.log(arr);  //[1,2,11,22,3,4,5] 

arr.splice(2,2,33,44);  //从位置2开始删除两项,插入两项,返回被删除的项
console.log(arr);  //[1,2,33,44,4,5] 

arr.splice(1,1);  //从位置1开始删除1项,返回被删除的项
console.log(arr);  //[1,33,44,4,5]

•数组的位置方法

ES5提供了两个位置方法:indexOf()和lastIndexOf()。这两个方法都接收两个参数:要查找的项和表示查找起点位置的索引(可选)。indexOf()方法从数组的开头向后查找,lastIndexOf()则从数组的末尾向前查找,例如:

var arr = [1,2,3,4,5,4,3,2,1];
console.log(arr.indexOf(4));  //3
console.log(arr.lastIndexOf(4));  //5 

console.log(arr.indexOf(4,4));  //5
console.log(arr.lastIndexOf(4,4));  //3

•数组的迭代方法

ES5定义了5种迭代方法,每个方法都接收两个参数:要在每一项上运行的函数和(可选)运行该函数的作用域对象--影响this的值。传入这些方法的函数可以接收三个参数:数组项的值、该项在数组中的索引和数组对象本身。

其中,every()方法和some()方法是相似的。对于every()方法来说,传入的函数必须对每一项都返回true,这个方法才返回true。而对于some(),传入的函数只要对数组中的任意一项返回true,该方法就返回true。例子如下:

var arr = [1,2,3,4,5,4,3,2,1];
var everyResult = arr.every(function(item,index,array){
  return (item>2);
});
console.log(everyResult);  //false,并不是全部大于2 

var someResult= arr.some(function(item,index,array){
  return (item>2);
});
console.log(someResult);  //true,某一项大于2即可

filter()方法根据给定的函数确定是否在返回的数组中包含某一项,例如:

var arr = [1,2,3,4,5,4,3,2,1];
var filterResult = arr.filter(function(item,index,array){
  return (item>2);
});
console.log(filterResult);  //[3,4,5,4,3],返回所有数值都大于2的一个数组

map()方法对于数组中的每一项都会运行给定的函数,然后将每一项函数运行结果组成的数组返回,例如:

var arr = [1,2,3,4,5,4,3,2,1];
var mapResult = arr.map(function(item,index,array){
  return item*2;
});
console.log(mapResult);  //[2,4,6,8,10,8,6,4,2],原先数组每一项乘以2后返回

最后一个方法是forEach(),它只对数组中的每一项运行给定函数,没有返回值,例如:

var arr = [1,2,3,4,5,4,3,2,1];
arr.forEach(function(item,index,array){
  //执行某些操作
});

•数组的缩小方法

ES5还提供了两个缩小数组的方法:reduce()和reduceRight()。这两个方法都会迭代数组中的所有项,然后返回一个最终的值。reduce()从第一项开始逐渐遍历到最后一项,reduceRight()从最后一项开始遍历到第一项结束。这两个函数都接收四个参数:前一个值、当前值、项的索引和数组对象。这个函数返回的任何值都会作为第一个参数自动传递给下一项。例如,使用reduce()方法求数组所有项的和:

var arr = [1,2,3,4,5];
var sum = arr.reduce(function(pre,cur,index,array){
  return pre+cur;
});
console.log(sum);  //15

第一次执行回调函数,pre是1,cur是2。第二次,pre是3(1+2),cur是3。这个过程会把数组的每一项都访问一遍,最后返回结果。reduceRight()方法与reduce()类似,只不过方向相反而已。

这篇笔记主要是根据JavaScript高级程序设计和网上资源总结出来的,如果有不完善的地方还请指出。

以上这篇基于JavaScript Array数组方法(新手必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • JavaScript ES5标准中新增的Array方法

    ES5中新增的不少东西,了解之对我们写JavaScript会有不少帮助,比如数组这块,我们可能就不需要去有板有眼地for循环了. ES5中新增了写数组方法,如下: forEach (js v1.6) map (js v1.6) filter (js v1.6) some (js v1.6) every (js v1.6) indexOf (js v1.6) lastIndexOf (js v1.6) reduce (js v1.8) reduceRight (js v1.8) 1.js中常用的数

  • Javascript数组Array方法解读

    接上一篇<Javascript数组Array基础介绍>,这一篇详细介绍Array的所有方法. 所有数组的方法都定义在Array.prototype上,而Array.prototype本身也是一个数组. array.concat() 浅复制一份当前数组,并把接收到的参数附加到新数组的末尾.原数组不改变. 语法 array.concat(value1, value2, ..., valueN) 参数为需要合并的数组或非数组值 var arr1 = [1, 2, 3]; var obj = {ani

  • Javascript数组Array基础介绍

    Javascript,一门神奇的语言,它的数组也同样独特.我们要去其糟粕,取其精华,把常用的最优实践总结出来.如有错误,请指出. javascript数组是一种类数组的对象,拥有对象的特性.当属性名是小而连续的整数时,应该使用数组,否则,使用对象. 数组来源 所有的数组都是Array构造出来的,我们来测试一下constructor这个属性. var arr = []; arr.constructor === Array; // true arr.constructor === Array.pro

  • JavaScript 数组- Array的方法总结(推荐)

    JavaScript中的Array类型是经常用到的,Array类型也提供了很多方法能实现我们需求,下面我们来总结一下 一.创建Array的方法 var colors=new Array(); var colors=new Array(3);//创建一个长度为3的数组 var colors=new Array("red","blue")//创建一个数组["red","blue"] 当然,上面的new可以省略不写,如 var co

  • 浅析JavaScript中的array数组类型系统

    前面的话 数组是一组按序排列的值,相对地,对象的属性名称是无序的.从本质上讲,数组使用数字作为查找键,而对象拥有用户自定义的属性名.javascript没有真正的关联数组,但对象可用于实现关联的功能 Array()仅仅是一种特殊类型的Object(),也就是说,Array()实例基本上是拥有一些额外功能的Object()实例.数组可以保存任何类型的值,这些值可以随时更新或删除,且数组的大小是动态调整的 除了对象之外,数组Array类型可能是javascript中最常用的类型了.而且,javasc

  • javascript之Array 数组对象详解

    1.创建Array对象方法: --->var arr = [element0, element1, ..., elementn];//简单的定义方法 复制代码 代码如下: var arr = [1,2,3] 此时可以知道 复制代码 代码如下: arr[0] == 1; arr[1] == 2; arr[2] == 3; --->new Array(); 复制代码 代码如下: var arr = new Array();//定义一个没有任何内容的数组对象,然后以下面的方式为其赋值 arr[0]

  • 基于JavaScript Array数组方法(新手必看篇)

    Array类型是ECMAScript中最常用的引用类型.ECMAScript中的数据与其它大多数语言中的数组有着相当大的区别.虽然ECMAScript中的数据与其它语言中的数组一样都是数据的有序列表,但不同的是,ECMAScript数组中的每一项可以保存任何类型的数据,无论是数值.字符串或者是对象.同时,ECMAScript中的数组大小是可以动态调整的,即可以根据数据的添加自动增长以容纳新增的数据.下面总结一下JavaScript中数组常用的操作函数及用法. •创建数组 创建数组主要有构造函数和

  • jquery对Json的各种遍历方法总结(必看篇)

    概述 JSON(javascript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包. 在JSON中,有两种结构:对象和数组. 1.对象 一个对象以"{"开始,"}"结束.每个"key"后跟一":","'key/v

  • js数组操作方法总结(必看篇)

    判断数值数组中各个数字出现的奇偶次数 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>数组操作</title> </head> <body> <script type="text/javascript"> var arr=[3,1,2,2,1,3,1

  • 老生常谈PHP数组函数array_merge(必看篇)

    很久之前就用到过这个函数,只不不过是简单的用用而已并没有做太深入的研究 今天在翻阅别人博客时看到了对array_merge的一些使用心得,故此自己来进行一次总结. array_merge是将一个或者多个数组进行合并. 这个函数多用于在从数据库中取出的结果集的合并操作. 参数配置也很简单array_merge(arr1,arr2,arrN) 注意此处的参数必须为数组,否则会报错. 虽然,看起来很简单,但是其中也有不少的坑. 我们将从单数组和多数组的方向来进行分析. 1.多个数组进行合并操作(自定义

  • vue2.X组件学习心得(新手必看篇)

    VUEJS学习网址:https://cn.vuejs.org/ 此文章是用来记录自己的学习和实践心得. 关注点:父子组件之间的通信 看图说话: Pass Props 子组件本身与父组件是孤立的,通过子组件中显示声明的props属性,接收父组件数据; 父组件的数据更新时,子组件的prop会跟着更新: 此数据流动是单向的(看着); Emit Events 子组件使用$.emit(fn)向外抛出自己的内部触发的事件; 父组件是否监听?如果父组件需要监听,使用v-on绑定监听,触发对应事件; 以上为通用

  • 基于Bootstrap分页的实例讲解(必看篇)

    前面的话 分页导航几乎在每个网站都可见,好的分页能给用户带来好的用户体验.本文将详细介绍Bootstrap分页 概述 在Bootstrap框架中提供了两种分页导航: ☑ 带页码的分页导航 ☑ 带翻页的分页导航 页码分页 带页码的分页导航,可能是最常见的一种分页导航,特别是在列表页内容超多的时候,会给用户提供分页的导航方式 [默认分页] 平时很多人喜欢用div>a和div>span结构来制作带页码的分页导航.不过,在Bootstrap框架中使用的是ul>li>a这样的结构,在ul标签

  • SQL中实现SPLIT函数几种方法总结(必看篇)

    例1 代码如下 create function f_split(@SourceSql varchar(8000),@StrSeprate varchar(10)) returns @temp table(a varchar(100)) --实现split功能 的函数 --date :2003-10-14 as begin declare @i int set @SourceSql=rtrim(ltrim(@SourceSql)) set @i=charindex(@StrSeprate,@Sou

  • ActiveMQ简单入门(新手必看篇)

    一.创建一个简单的Hello World案例 首先需要导入activemq-all-5.14.5.jar包,写生产端: package com.ietree.mq.helloworld; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.DeliveryMode; import javax.jms.Destination; import javax.jms.MessageProduc

  • java读取XML文件的四种方法总结(必看篇)

    JAVA操作XML文档主要有四种方式,分别是DOM.SAX.JDOM和DOM4J,DOM和SAX是官方提供的,而JDOM和DOM4J则是引用第三方库的,其中用的最多的是DOM4J方式.运行效率和内存使用方面最优的是SAX,但是由于SAX是基于事件的方式,所以SAX无法在编写XML的过程中对已编写内容进行修改,但对于不用进行频繁修改的需求,还是应该选择使用SAX. 下面基于这四种方式来读取XML文件. 第一,以DOM的方式实现. package xmls; import org.w3c.dom.D

  • 基于Oracle闪回详解(必看篇)

    Oracle 9i 开始支持闪回,Oracle10g开始全面支持闪回功能,Oracle11g有所完善,为大家快速的恢复数据,查询历史数据提供了很大的便捷方法. 本文主要对Oracle常用闪回使用做些详细介绍,其中对于不常用的事务和版本闪回,这里就不做介绍 一.Oracle闪回概述 闪回级别 闪回场景 闪回技术 对象依赖 影响数据 数据库 表截断.逻辑错误.其他多表意外事件 闪回DATABASE 闪回日志.undo 是 DROP 删除表 闪回DROP 回收站(recyclebin) 是 表 更新.

随机推荐