一、数组简介

    JavaScript数组的每一项都可以保存任何类型的数据,也就是说数组的第一个位置保存字符串,第二个位置可以保存数值,第三个位置可以保存对象,而且数组的大小是可以动态调整的,即可以随着数据的添加而自动增长以扩容纳新增数据。

 

二、数组的操作

1.创建

		//创建一个空数组
var arr = [];
var arr2 = [1,true,new Date()];
arr2.length = 2;
alert(arr2); //true

 

2.pop和push方法

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

     pop(): 删除数组末尾元素,并把它返回。

		     /*
* push(): 向数组的末尾添加一个或更多元素,并返回新的长度。
* pop(): 删除并返回数组最后一个元素。
*/
var arr = [];
var length = arr.push(1,2,true,"abc");
alert(arr); //1,2,true,abc
alert(length); //4 var a = arr.pop();
alert(arr); //1,2,true
alert(a); //abc

 

3.shift和unshift方法

     shift(): 删除并返回数值的第一个元素。

     unshift(): 向数组的开头添加一个或多个元素,并返回新的数组长度。

            /*
* shift(): 删除并返回数组的第一个元素
* unshift(): 向数组的开头添加一个或更多元素,并返回新的长度。
*/
var arr = [1,true,"abc"];
var a = arr.shift();
alert(a);//1
alert(arr);//true,abc
var length = arr.unshift("A","B");
alert(length);//4
alert(arr);//A,B,true,abc
</script>

 

4.splice()和slice()

      splice()

     解释: 向/从数组中添加/删除项目,然后返回被删除的内容。

     语法: arr.splice(index,num,item1,item2,...,itemN);

参数 描述
index 必需。整数,规定了要操作的位置。
num 必须。要删除的数量,如果为0,则不会删除。
item 可选。向数组添加新的一项。
			var arr = ["AAA","BBB","CCC","DDD","EEE"];
var newArr = arr.splice(1,1);
alert(newArr);//BBB
alert(arr);//AAA,CCC,DDD,EEE
arr.splice(1,0,"111","222");
alert(arr); //AAA,111,222,CCC,DDD,EEE

 

     slice()

     解释: 向已有的数组中返回选定的元素。

     语法: arr.slice(start,end);

参数 描述
start 必需。规定从何处开始选取。
end 可选。规定从何处结束选取。

    注意: 该方法并不会修改数组而是返回一个子数组,如果想删除数组中的一段元素,用splice()。

			var arr = ["AAA","BBB","CCC","DDD","EEE"];
var newArr = arr.slice(1,3);
alert(newArr);//BBB,CCC
alert(arr);//AAA,BBB,CCC,DDD,EEE

 

5.concat()

     解释: 该方法用于多个数组或元素,该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。

     语法: arr.concat(arr1,arr2,...,arrN);

     参数: 可以是具体值也可以是数组对象。

			var arr = ["AAA","BBB","CCC"];
var newArr = arr.concat("DDD","EEE");
alert(newArr); // AAA,BBB,CCC,DDD,EEE
alert(arr); // AAA,BBB,CCC
var arr2 = ["111","222"];
var newArr2 = arr.concat(arr2);
alert(newArr2); // AAA,BBB,CCC,111,222
alert(arr); // AAA,BBB,CCC

 

6.join()

     解释: 用于把数组中的所有元素放入一个字符串,元素是通过指定分隔符进行分割。

     语法: arr.join(separator)

     参数: 可选,指定要使用的分隔符,如果省略就使用逗号分隔。

			var arr = ["AAA","BBB","CCC"];
var a = arr.join("-");
alert(a); // AAA-BBB-CCC
alert(arr); // AAA,BBB,CCC

 

7.reverse()

     该方法用于颠倒数组元素的位置,会改变原来的数组。

			var arr = ["AAA","BBB","CCC"];
arr.reverse();
alert(arr); // CCC,BBB,AAA

 

8.sort()

     解释: 用于对数组的元素进行排序。

     语法: arr.sort(sortby)

     参数: 规定排序顺序必须是函数。

     注意:

           (1)数组在原数组上进行排序,不生成副本。

           (2)如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序。

			var arr = ["AAA","DDD","EEE","BBB","CCC"];
arr.sort();
alert(arr); // AAA,BBB,CCC,DDD,EEE var arr2 = [1,11,22,2,3,4,44,6];
arr2.sort();
alert(arr2); //1,11,2,22,3,4,44,6 function numFormat(a,b){
return a - b;
}
arr2.sort(numFormat);
alert(arr2); // 1,2,3,4,6,11,22,44

 

三、数组新特性

1.位置方法

indexOf(): 返回某个指定的值在数组首次出现的位置索引。

lastIndexOf(): 从后查找,返回当前值的索引位置。

			var arr = [1,2,3,4,5,4,3,2,1];
//1个参数: 参数是值,返回索引位置
var index = arr.indexOf(4);
//两个参数:第一个表示起始位置,第二个参数还是值
var index2 = arr.indexOf(4,4);
//从后往前查找,返回索引位置
var index3 = arr.lastIndexOf(2);
alert(index); //3
alert(index2); //5
alert(index3); //7

 

2.迭代的方法

(1)every

    对数组的每一项运行给定函数,如果该函数对每一项都返回true,这个方法都返回true,否则就返回false。即检测数组的每一项是否符合条件。

   

			var arr = [1,2,3,4,5,4,3,2,1];
var result = arr.every(function(item,index,array){
return item > 2;
});
alert(result); //false

 

(2)some

    对数组中的每一项运行给定函数,只要传入函数对数组中的某一项返回true,就会返回true。即检测数组中是否某些有符合条件的。

    

			var arr = [1,2,3,4,5,4,3,2,1];
var result = arr.some(function(item,index,array){
return item > 2;
});
alert(result); //true

 

(3)filter

    对数组的每一项运行给定函数,如果返回true,那么把这些返回true的项组成新数组返回过去。即筛选出数组符合条件的项,组成新数组。

    

			var arr = [1,2,3,4,5,4,3,2,1];
var result = arr.filter(function(item,index,array){
return item > 2;
});
alert(result); //3,4,5,4,3

 

(4)map

    对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。即让数组通过计算产生一个新的数组。

   

			var arr = [1,2,3,4,5,4,3,2,1];
var result = arr.map(function(item,index,array){
return (item * 2);
});
alert(result); //2,4,6,8,10,8,6,4,2

 

(5)forEach

     对数组中的每一项都运行给定函数,该方法没有返回值。本质上和for循环迭代数组一样。

    

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

3.缩小的方法

(1)reduce

     该方法会迭代数组的所有项,然后构建一个最终的返回值,这个方法是从第一项开始,逐个遍历到最后。

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

    第一次执行回调函数,pre是1,cur是2。第二次,pre是3,cur是3。这个过程会持续把数组中的每一项都访问一遍,最后返回结果。

 

(2)reduceRight

     该方法会迭代数组的所有项,然后构建一个最终的返回值,这个方法是从最后一项开始,逐个遍历到第一项。

			var arr = [1,2,3,4,5];
var result = arr.reduceRight(function(pre,cur,index,array){ return pre + cur;
});
alert(result); //15

     第一次执行回调函数,pre是5,cur是4。第二次,pre是9,cur是3。这个过程会持续把数组中的每一项都访问一遍,最后返回结果。

     使用reduce()还是reduceRight(),主要取决于从哪头开始遍历数组,其他完全一样。

JavaScript基础学习(三)—数组的更多相关文章

  1. JavaScript 基础 学习(三)

    JavaScript 基础 学习(三) 事件三要素 ​ 1.事件源: 绑定在谁身上的事件(和谁约定好) ​ 2.事件类型: 绑定一个什么事件 ​ 3.事件处理函数: 当行为发生的时候,要执行哪一个函数 ...

  2. JavaScript 基础学习1-day14

    JavaScript 基础学习1 知识预览JavaScript概述二 JavaScript的基础三 JavaScript的对象BOM对象DOM对象实例练习js扩展 JavaScript概述 JavaS ...

  3. JavaScript 基础 学习 (一)

    JavaScript 基础 学习 获取页面中的元素的方法 作用:通过各种方式获取页面中的元素 ​ 比如:id,类名,标签名,选择器 的方式来获取元素 ​ 伪数组: ​ 长的和数组差不多,也是按照索引排 ...

  4. JavaScript基础(三)

    十三.JS中的面向对象 创建对象的几种常用方式 1.使用Object或对象字面量创建对象 2.工厂模式创建对象 3.构造函数模式创建对象 4.原型模式创建对象 1.使用Object或对象字面量创建对象 ...

  5. 48.javascript基础学习

    javascript基础学习:   http://www.w3school.com.cn/jsref/index.asp jS的引入方式: 1.行间事件:为某一个具体的元素标签赋予js内容,oncli ...

  6. JavaScript 基础学习(二)js 和 html 的结合方式

    第一种 使用一个标签 <script type="text/javascript"> js代码; </script> 第二种 使用 script 标签,引入 ...

  7. JavaScript 基础 学习 (四)

    JavaScript 基础 学习 (四) 解绑事件 dom级 事件解绑 ​ 元素.on事件类型 = null ​ 因为赋值的关系,所以给事件赋值为 null 的时候 ​ 事件触发的时候,就没有事件处理 ...

  8. Python入门基础学习 三

    Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形 ...

  9. Python基础学习三

    Python基础学习三 1.列表与元组 len()函数:可以获取列表的元素个数. append()函数:用于在列表的最后添加元素. sort()函数:用于排序元素 insert()函数:用于在指定位置 ...

随机推荐

  1. 基于CPS变换的尾递归转换算法

    前言 众所周知,递归函数容易爆栈,究其原因,便是函数调用前需要先将参数.运行状态压栈,而递归则会导致函数的多次无返回调用,参数.状态积压在栈上,最终耗尽栈空间. 一个解决的办法是从算法上解决,把递归算 ...

  2. 转:KVC与KVO机制

    由于Objective-C是基于Smalltalk进行设计的,所以它具有动态加载.动态绑定等特性.Key-value coding (KVC) 和 key-value observing (KVO) ...

  3. 【2017-02-24】循环嵌套、跳转语句、异常语句、迭代穷举、while

    一.循环嵌套 1.格式 for() { for() { } } 2.执行顺序 先执行外边循环进到循环体发现里面的循环,开始执行里面的循环.等到里面的循环执行完毕,再执行外边的循环. 在外面循环第一次, ...

  4. perl 获取系统时间

    最近需要将字符串转换成时间,找了下资料,实战如下,发现时timelocal费了些时间 strftime也可在 c / c++ / awk / php 中使用,用法基本一致. 这个也不错 $time = ...

  5. 寻找与疾病相关的SNP位点——R语言从SNPedia批量提取搜索数据

    是单核苷酸多态性,人的基因是相似的,有些位点上存在差异,这种某个位点的核苷酸差异就做单核苷酸多态性,它影响着生物的性状,影响着对某些疾病的易感性.SNPedia是一个SNP调査百科,它引用各种已经发布 ...

  6. Selenium 使用过程遇到问题随笔

    最近正在学习Selenium,自学是比较难的,也很感谢网络环境中,各位大大的博文帮助. 也希望在此能够记录一下从小白学习使用selenium测试的过程,也希望能对别人有所帮助. 关于环境部署,以及入门 ...

  7. 算法模板——sap网络最大流 1(非递归+邻接矩阵)

    实现功能:首行输入N,M,S,T,代表这张图N个点,M条边,源点为S,汇点为T:接下来T行输入个边的出发点.终点和权值:输出最大流 原理:sap网络流算法(详见百度百科,个人觉得这个模板已经不错了,虽 ...

  8. HTML5学习笔记<五>: HTML表单和PHP环境搭建

    HTML表单 1. 表单用于不同类型的用户输入 2. 常用的表单标签: 标签 说明 <form> 表单 <input> 输入域 <textarea> 文本域 < ...

  9. Exchange Server 2007的即将生命周期,您的计划是?

    多数人做微软技术,Exchange Server 几乎所有 Microsoft 产品,都具有产品支持生命周期,原厂提供的新增功能. 错误修复.安全修补程序等.产品生命周期通常持续时间 10 年,超过期 ...

  10. 解决 Linux error while loading shared libraries: cannot open shared object file: No such file or directory

    安装最新版本Emqtt,参照官方文档安装后,执行报错: Linux error while loading shared libraries libsctp.so.1: cannot open sha ...