JS引用类型 -- Array类型

ECMAScript数组与其他语言中的数组都是数据的有序列表,但与其他语言不同的是,ECMAScript数组的每一项可以保存任何类型的数据。而且ECMAScript数组的大小是可以动态调整的,即可以随着数据的添加自动增长。

创建数组的基本方式有两种:

第一种是使用Array构造函数:

//1. 使用Array构造函数
var colors = new Array();//2.如果预先知道数组要保存的项目数量,也可以给构造函数传递该数量,改数量会自动变成length的属性值
var colors2 = new Array(20);
alert(colors2.length);    //20//3.也可以向Array构造函数传递数组中应该包含的项。
var colors3 = new Array("red", "blue", "green");//4.给构造函数传递一个值时,如果传递的是数值,表示该数组的长度。如果传递的是其他类型,则会创建包含那个值的数组
var colors4 = new Array(3);    // 创建一个包含3项的数组
var colors5 = new Array("Greg");    //创建一个包含1项的数组//5. 在使用Array构造函数时也可以省略new操作符
var colors6 = Array(3);
var names = Array("Greg");

第二种是使用数组字面量表示法: 数组字面量是由一对包含数组项的方括号表示,多个数组项之间以逗号隔开

var colors = ["red", "blue", "green"];    //创建一个包含三个字符串的数组
var names = [];    //创建一个空数组//在读取和设置数组的值时,要使用方括号并提供相应值的基于0的数字索引
alert(colors[0]);    //red
colors[2] = "black";
colors[3] = "brown";    //索引大于数组项时,自动增加一个
alert(colors.length);    //4

colors[99] = "black";
alert(colors.length);    //100

1.检测数组

instanceof :

Array.isArray(): 确定某个值是否为数组

if(Array.isArray(colors)){alert("yes");
}

2.转换方法

toString() 方法: 返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串。

valueOf() 方法: 返回的还是数组。

var colors = ["red", "blue", "green"];    //创建一个包含三个字符串的数组
alert(colors.toString());    //red,blue,green
alert(colors.valueOf());    //red,blue,green
alert(colors);    //red,blue,green

上述代码显示的调用了toString()和valueOf()方法,以便返回数组的字符串表示,每个值的字符串表示拼接成了一个字符串,中间以逗号隔开。最后一行代码直接将数组传递给了alert()。由于alert()要接收字符串参数,所以它会在后台调用toString()方法,由此会得到与直接调用toString()方法相同的结果。

数组继承的toLocaleString()、toString()和valueOf()方法,在默认情况下都会以逗号分隔的字符串形式返回数组项,如果使用join()方法,则可以使用不同的分隔符来构建这个字符串。join()方法只接收一个参数,即分隔符的字符串。

var colors = ["red", "blue", "green"];    //创建一个包含三个字符串的数组
alert(colors.join("||"));    //red||blue||green

3. 栈方法

ECMAScript数组也提供了一种让数组的行为类似其他数据结构的方法。

栈是一种LIFO(Last-In-First-Out)的数据结构。也就是最新添加的项最早被移除。栈中项的插入(推入)和移除(弹出),只发生在一个位置上--- 栈的顶部。

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

pop() 方法: 从数组末尾移除最后一项,减少数组的length值,然后返回移除的项。

var colors = ["red", "blue"];
var count = colors.push("green");
alert(count);    //3

count = colors.push("black");
alert(count);    //4var item = colors.pop();
alert(item);    //black

4. 队列方法

队列数据结构的访问规则是FIFO(First-In-First-Out)。队列在列表的末端添加项,从列表的前端移除项。

push() 方法: 向数组末尾中添加项。

shift() 方法: 移除数组中的第一项并返回该项。

unshift() 方法: 在数组前端添加任意项并返回新数组的长度。

var colors = new Array();
var count = colors.push("red", "green");
alert(count);    //2

count = colors.push("black");
alert(count);    //3var item = colors.shift();
alert(item);    //red

count = colors.unshift("summer", "chen");
alert(count);    //4
alert(colors);    //summer,chen,green,black

5.重排序方法

数组中已经存在两个可以直接用来排序的方法:

reverse() 方法: 反转数组项的顺序

sort(): 方法:在默认情况下,按升序排列数组项。sort()方法会调用每个数组项的toString()转型方法,然后比较得到的字符串。

var values = [0, 1, 3, 15, 5, 10];
values.reverse();
alert(values);    //10,5,15,3,1,0

values.sort();
alert(values);    //0,1,10,15,3,5

sort()方法可以接收一个比较函数作为参数。

比较函数接收两个参数,如果第一个参数应该位于第二个之前——返回一个负数;两个参数相等——返回0;第一个参数该位于第二个之后——返回一个正数。

function compare(value1, value2){if(value1 < value2){return -1;}else if(value1 == value2){return 0;}else{return 1;}
}
var values = [0,15,10,5,1];
values.sort(compare);
alert(values);    //0,1,5,10,15

对于数值类型 或 其valueOf()方法会返回数值类型的对象类型,可以使用下列方法:

function compare(value1, value2){return value2 - value1;
}
var values = [0,15,10,5,1];
values.sort(compare);
alert(values);    //0,1,5,10,15

6.操作方法

concat() 方法: 基于当前数组中的所有项创建一个新数组。具体来说,这个方法会先创建当前数组的一个副本,然后讲接收到的参数添加到这个副本的末尾,最后返回新构建的数组。在没有给concat()方法传递参数的情况下,它只是复制当前数组并返回副本。如果传递给concat()方法的是一或多个数组,则该方法会将这些数组中的每一项都添加到结果数组中。如果传递的值不是数组,这些值就会简单的添加到结果数组的末尾。

var colors = ["red", "green", "blue"];
var colors2 = colors.concat("yellow", ["black", "brown"]);alert(colors);    //red,green,blue
alert(colors2);    //red,green,blue,yellow,black,brown

slice() 方法: 基于当前数组中的一个或多个项创建一个新数组。slice()方法可以接受一个或两个参数,即要返回项的起始和结束的位置。slice方法不会影响原始数组。

var colors = ["red", "green", "blue", "black", "brown"];//1. 在只有一个参数的情况下,slice方法返回从该参数位置开始到当前数组末尾的所有项
var colors2 = colors.slice(1);
alert(colors2);    //green,blue,black,brown//2.有两个参数,该方法返回起始位置和结束位置之间的项,不包括结束位置的项
var colors3 = colors.slice(1,3);
alert(colors3);    //green,bluevar colors4 = colors.slice(3,1);
alert(colors4);    //空数组var colors5 = colors.slice(1,1);
alert(colors5);    //空数组var colors6 = colors.slice(5);
alert(colors6);    //空数组var colors7 = colors.slice(3, 15);
alert(colors7);    //black,brown

splice()方法:主要用途是向数组中部插入项。改方法返回被删除的项。

var colors = ["red", "green", "blue", "black", "brown"];//1. 删除: 可以删除任意数量的项,只需指定第一项的位置和要删除的项数。返回被删除的项
var colors2 = colors.splice(1,3);
alert(colors2);    //green,blue,black
alert(colors);    //red, brown//2.插入:提供三个参数:起始位置、0(要删除的项数)、要插入的项
var colors3 = colors.splice(1,0, "summer", "holiday");
alert(colors);    //red,summer,holiday,brownvar colors4 = colors.splice(-1,0, "summer", "holiday");//起始位置小于0时,按0计算
alert(colors);    //red,summer,holiday,summer,holiday,brownvar colors5 = colors.splice(10,0, "summer", "holiday");//起始位置大于数组长度时,按数组长度计算
alert(colors);    //red,summer,holiday,summer,holiday,brown,summer,holiday
alert(colors.length);    //8//3.替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,三个参数:起始位置,要删除的项数,要插入的项
var colors6 = colors.splice(1, 4, "green", "blue", "black");
alert(colors6);    //summer,holiday,summer,holiday
alert(colors);    //red,green,blue,black,brown,summer,holiday

7. 位置方法

ECMAScript提供了两个位置方法,这两个方法都接收两个参数,要查找的项和查找起点位置的索引(可选的)

indexOf() 方法: 从数组的开头(位置0)开始向后查找。

lastIndexOf() 方法:从数组的末尾开始向前查找。

var numbers = [1,2,3,4,5,4,3,2,1];alert(numbers.indexOf(4));    //3
alert(numbers.lastIndexOf(4));//5

alert(numbers.indexOf(4,4));//5
alert(numbers.lastIndexOf(4,4));//3

alert(numbers.indexOf(6));//-1
alert(numbers.lastIndexOf(6));//-1var person = {name: "Nicholas"};
var people = [{name: "Nicholas"}];var morePeople = [person];alert(people.indexOf(person));    //-1
alert(morePeople.indexOf(person));//0

8. 迭代方法

ECMAScript为数组定义了5个迭代方法。每个方法都接收两个参数: 每一项上运行的函数和运行该函数的作用域对象(可选的)--影响this值。

传入这些方法中的函数接收三个参数:数组项的值、该项在数组中的位置、数组对象本身

every() 方法:  对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true

filter() 方法: 对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组

forEach() 方法:对数组中的每一项运行给定函数,该函数没有返回值

map() 方法:对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组

some() 方法:  对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true

var numbers = [1,2,3,4,5,4,3,2,1];var everyResult = numbers.every(function(item, index, array){return (item > 2);});
alert(everyResult);    //falsevar someResult = numbers.some(function(item, index, array){return (item > 2);});
alert(someResult);    //truevar filterResult = numbers.filter(function(item, index, array){return (item > 2);});
alert(filterResult);    // 3,4,5,4,3var mapResult = numbers.map(function(item, index, array){return (item + 2);});
alert(mapResult);    //3,4,5,6,7,6,5,4,3

9.缩小方法

ECMAScript有两个缩小数组的方法。这两个方法都会迭代数组的所有项,然后构建一个最终返回的值。这两个方法都接收两个参数,在每一项上调用的函数和作为缩小基础的初始值。

传入这些方法的函数接收四个参数:前一个值、当前值、项的索引、数组对象。这个函数返回的任何值都会作为第一个参数自动传给下一项。第一次迭代发生在数组的第二项上,因此第一个参数是数组的第一项,第二个参数就是数组的第二项。

reduce() 方法: 从数组的第一项开始,逐个遍历

reduceRight() 方法: 从数组的最后一项开始,向前遍历到第一项

var values = [1,2,3,4,5];
var sum = values.reduce(function(prev, cur, index, array){return prev + cur;});
alert(sum);    //15                    var sum2 = values.reduceRight(function(prev, cur, index, array){return prev + cur;});
alert(sum2);    //15

 

转载于:https://www.cnblogs.com/PrajnaParamita/p/5865487.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283796.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式id解决方案

文章目录 1.分布式id实现方案 1.1.uuid1.2 数据库主键自增1.3 Redis自增1.4 号段模式1.5 雪花算法&#xff08;snowflake&#xff09; 1.5.1 百度&#xff08;uid-generator&#xff09;1.5.2 美团&#xff08;Leaf&#xff09;所谓id就是能够用作唯一标识的记号。 在我们日常的…

我和大象的十年往事 - 感恩、感谢、加油、腾飞

背景 http://www.idcquan.com/Special/OSCAR2018/index.html 由中国信息通信研究院主办、中国通信标准化协会支持的"OSCAR云计算开源产业大会"于2018年3月21日&#xff0d;22日在国家会议中心举行。 非常有幸获得了“OSCAR尖峰开源人物”奖项。 奖项不敢自居&#xf…

Httpclient发送json请求

一、Httpclient发送json请求 public String RequestJsonPost(String url){ String strresponse null; try{ HttpClient hc new DefaultHttpClient(); HttpPost hp new HttpPost(url); JSONObject jsonParam new JSONObject(); jsonParam.pu…

基于ABP的AppUser对象扩展

在ABP中AppUser表的数据字段是有限的&#xff0c;现在有个场景是和小程序对接&#xff0c;需要在AppUser表中添加一个OpenId字段。今天有个小伙伴在群中遇到的问题是基于ABP的AppUser对象扩展后&#xff0c;用户查询是没有问题的&#xff0c;但是增加和更新就会报"XXX fie…

html (align 、placeholder )

onblur 事件会在对象失去焦点时发生。 onkeyup 事件会在键盘按键被松开时发生。 ----------------------------------------------------------------------------------------------------------- align 属性规定单元格中内容的水平对齐方式。 <td align"value"&…

4种分布式session解决方案

cookie和session的区别和联系 cookie是本地客户端用来存储少量数据信息的&#xff0c;保存在客户端&#xff0c;用户能够很容易的获取&#xff0c;安全性不高&#xff0c;存储的数据量小 session是服务器用来存储部分数据信息&#xff0c;保存在服务器&#xff0c;用户不容易获…

L2-020. 功夫传人

一门武功能否传承久远并被发扬光大&#xff0c;是要看缘分的。一般来说&#xff0c;师傅传授给徒弟的武功总要打个折扣&#xff0c;于是越往后传&#xff0c;弟子们的功夫就越弱…… 直到某一支的某一代突然出现一个天分特别高的弟子&#xff08;或者是吃到了灵丹、挖到了特别的…

找数组里没出现的数

题目&#xff1a;给定整数的数组&#xff0c;其中1≤A [1]≤ N&#xff08;N数组的大小&#xff09;&#xff0c;一些元素出现两次以及其他出现一次。找到不出现在这个数组中的[1&#xff0c;n ]包含的所有元素。 思路&#xff1a;map的思想。。。。 public List<Integer>…

Blazor University (43)JavaScript 互操作 —— 类型安全

原文链接&#xff1a;https://blazor-university.com/javascript-interop/calling-dotnet-from-javascript/type-safety/类型安全在从 JavaScript 调用 .NET[1] 部分中&#xff0c;您可能已经注意到我们的 JavaScript 的第 6 行在将随机生成的数字传递给 .NET 之前调用了 toStr…

分享 60 个神级 VS Code 插件

文章来源&#xff1a;juejin.cn/post/6994327298740600839 本文不做任何编辑器的比较&#xff0c;只是我本人日常使用 vscode 进行开发&#xff0c;并且比较喜欢折腾 vscode &#xff0c;会到处找这一些好玩的插件&#xff0c;于是越攒越多&#xff0c;今天给大家推荐一下我收…

URL结构分析

http://bh-lay.com/blog/14b531db64a

PHP 基础篇 - PHP 中 DES 加解密详解

2019独角兽企业重金招聘Python工程师标准>>> 一、简介 DES 是对称性加密里面常见一种&#xff0c;全称为 Data Encryption Standard&#xff0c;即数据加密标准&#xff0c;是一种使用密钥加密的块算法。密钥长度是64位(bit)&#xff0c;超过位数密钥被忽略。所谓对…

PerfView专题 (第一篇): 如何寻找热点函数

一&#xff1a;背景 准备开个系列来聊一下 PerfView 这款工具&#xff0c;熟悉我的朋友都知道我喜欢用 WinDbg&#xff0c;这东西虽然很牛&#xff0c;但也不是万能的&#xff0c;也有一些场景他解决不了或者很难解决&#xff0c;这时候借助一些其他的工具来辅助&#xff0c;是…

3四则运算软件2016011992

使用JAVA编程语言&#xff0c;独立完成一个3到5个运算符的四则运算练习的命令行软件开发 基本功能要求&#xff1a; 程序可接收一个输入参数n&#xff0c;然后随机产生n道加减乘除&#xff08;分别使用符号-*来表示&#xff09;练习题&#xff0c;每个数字在 0 和 100 之间…

JAVA高并发多线程必须懂的50个问题

下面是Java线程相关的热门面试题&#xff0c;你可以用它来好好准备面试。 1) 什么是线程&#xff1f; 线程是操作系统能够进行运算调度的最小单位&#xff0c;它被包含在进程之中&#xff0c;是进程中的实际运作单位。程序员可以通过它进行多处理器编程&#xff0c;你可以使用…

Centos7设置IP为固定值

1.进入到系统的IP地址保存文件所在目录 [rootlocalhost ~]# cd /etc/sysconfig/network-scripts 2.修改保存IP信息的文件 [rootlocalhost ~]# vim ifcfg-eth0 &#xff08;你机器上的名字有可能不是这个&#xff0c;但是是以ifcfg-eth开头的文件&#xff09; 保存后退出 3.重启…

为 EditorConfig 文件开启错误编译失败

前言上次&#xff0c;我们介绍了 EditorConfig 文件可以自定义代码样式规则。但是&#xff0c;当我们想设置代码样式严重性&#xff0c;比如不允许编译成功时&#xff0c;又踩了不少坑。修改无效想把 var 首选项&#xff0c;从“首选"var" 仅重构”&#xff0c;改成“…

【.NET特供-第三季】ASP.NET MVC系列:传统WebForm站点和MVC站点执行机制对照

本文以图形化的方式&#xff0c;从‘执行机制’方面对照传统WebForm站点和MVC站点。请參看下面图形&#xff1a; 一、执行机制 当我们訪问一个站点的时候&#xff0c;浏览器和server都是做了哪些动作呢&#xff1f; &#xff08;本文仅仅是提供一个简单的执行过程&#xff0c;有…

hdoj1045 Fire Net(二分图最大匹配)

题意&#xff1a;给出一个图&#xff0c;其中有 . 和 X 两种&#xff0c;. 为通路&#xff0c;X表示墙&#xff0c;在其中放炸弹&#xff0c;然后炸弹不能穿过墙&#xff0c;问你最多在图中可以放多少个炸弹&#xff1f; 这个题建图有点复杂orz。 建图&#xff0c;首先把每一行…

c++的命名空间

一.C的命名原则namespace是指标识符的各种可见范围&#xff0c;c的所有标识符都被定义在一个名为std的namespace中。1.<iostream>和<iostream.h>是两个不同的文件&#xff0c;后缀为.h的头文件c标准已经明确提出不支持了&#xff0c;早些的实现将标准库功能定义在全…