整理ECMAScript数组


  • 创建数组
  • 数组内置方法
  • 衍生问题:
    1.如何检测某个对象是不是数组?

创建数组的基本方式

  • 1.使用Array构造函数
    var colors = new Array();
    var colors = new Array(20);//知道数组的长度
    var colors = new Array("red","blue","green");//直接传递数组的项
    注意:
    给构造函数传递一个值也可以创建数组,但是这个时候就要看传递值的类型。
- 若传递的是数值
var clolors = new Array(3); //[empty × 3] 则创建了一个包含三项的数组
- 若传递的是其他类型的参数,比如字符串
var colors = new Array('3');//["3"]
- 在使用Array构造函数时,也可以省略new操作符
  • 2.使用数组字面量表示法。(不要被数组字面量这个概念吓着,其实就是由一对包含数组项的方括号表示,多个数组项之间逗号隔开)
- var colors = ["red","blue","green"]; //["red","blue","green"]
- var colors = [];//创建一个空数组
- 但是要注意,
    var v = [1,2,]; //会创建一个包含2 或者 3项(IE)的数组
- 数组最多可以包含4294967295 = 2的32次方-1个项。

数组内置方法

转换方法

所有的对象都具有下面三个方法。

  • toString()
  • valueOf()
  • toLocaleString()
- 在控制台运行如下代码:
var c = ['red', 'blue', 'green'];
c.toString();//"red,blue,green"
c.valueOf();//["red", "blue", "green"]
c.toLocaleString();//"red,blue,green"
可以看到:
toLocaleString() 和toString()会返回由数组中每一项以英文逗号拼接的字符串;
valueOf() 返回的还是数组;

分隔方法

  • join()
    通过这个方法,可以使用不同的分隔符来拼接数组。
- 在控制台执行
c.join('||') //"red||blue||green"
若是不传分隔符,默认就是英文逗号拼接
c.join()  //"red,blue,green"   

栈方法

  • push()
  • pop()
    ECMAScript专门提供这两种方法,实现类似栈的行为(后进先出,且始终只作用于栈的顶部)
- push():可以接收任意数量的参数,把它们逐个添加到数组的尾部,并返回修改后数组的长度。
- pop():从数组末尾移出最后一项,减少数组的length值,然后返回移出的项。

队列方法

  • shift()
  • unshift()
    队列与栈有所不同。队列是先进先出,且在列表的末端添加项,从列表的前端移出项。结合使用push()和shift()方法,即可模拟队列;结合使用pop()和unshift()方法,即可反向模拟队列;即在数组的前端添加项,从数组的末端移出项。
- shift() 在控制台执行下面代码:
    var colors = new Array();
    var count = colors.push("red", "green");
    输出colors和count:
    colors // ["red", "green"]
    count // 2
    count = colors.push("black");
    colors // ["red", "green","black"]
    count // 3
    var item = colors.shift();
    item//"red"
    colors// ["green", "black"]
    可以看出,shift()是移出数组中的第一项并返回该项,同时将数组长度减1.
- unshift()
  与shift()方法相反,该方法可以在数组前端添加任意个项并返回新数组长度。在控制台输入如下代码:
     var colors = new Array(); 
     var count = colors.unshift("red", "green");   //2
     colors   //"red", "green"]
     count = colors.unshift("black"); //3
     colors   //["black", "red", "green"]

重排序方法

  • reverse() 反转数组
  • sort() 按升序排列数组项
- reverse() 在控制台执行下面代码:
  [1,2,3,4,5].reverse() // [5, 4, 3, 2, 1]
- sort()
  [3,5,1,9,7].sort() // [1, 3, 5, 7, 9]
  但是要注意:sort()方法比较的是字符串,即便数组中每一项都是数值,sort()方法比较的也是字符串,如下所示:
  [10, 5, 2, 3].sort() //[10, 2, 3, 5]
  这是因为,为了实现排序,sort()方法会调用每个数组项的toString()方法。

操作方法

  • concat() 连接数组
    先创建当前数组的一个副本,然后将接收到的参数添加到这个副本的末尾,最后返 回新构建的数组。
    1)若没有给concat()方法传参数,则只是复制当前数组并返回副本。
    2)如果传递给concat()方法的是一个或多个数组,则该方法会将这些数组中的每一项都添加到结果数组中。
    3)如果传递的值不是数组,这些值就被会简单的添加到结果数组的末尾。
- concat() 在控制台执行下面代码:
   var colors = [1, 2,3];
   var colors2=colors.concat("yellow", ["a", "b"]);
   colors2 // [1, 2, 3, "yellow", "a", "b"]
  • slice()
    基于当前数组中的一个或多个项创建一个新数组。我的理解就是用于切割数组的,但是不影响原数组。要注意的就是参数。根据参数来分:
    1)一个参数,且参数为正
    2)一个参数,且参数为负
    3)两个参数,且参数都为正
    4)两个参数,且参数都为负
    5)两个参数,一正一负,不分先后
- 根据上面五种情况举例。
  var colors = [1, 2, 3];
  colors.slice(1) // [2, 3](返回从该参数指定位置开始到当前数组末尾的所有项)
  colors.slice(-1) // [3] (参数加上数组长度,然后和为正的处理相同)
  colors.slice(1, 3) // [2, 3](返回起始位置和结束位置之间的项,不包括结束位置)
  colors.slice(-2,-1) // [2](参数加上数组长度,然后和为正的处理相同)
  colors.slice(-2,1) // [] 无意义
  colors.slice(2,-1) // [] 无意义
  • splice() 删除、插入、替换均可(根据参数的不同,作用不同)
    删除:两个参数,第一个参数是要删除的第一项的位置;第二个参数是要删除的项数。
    插入:至少三个参数,第一个参数是插入的起始位置;第二个参数是0(要删除的项);第三个参数是要插入的项。如果要插入多个项,可以再传入第四个、第五个等等项。
    替换:至少三个参数,第一个参数是要替换的起始位置;第二个参数是要删除的项数(大于0);第三个参数要替换的项。同替换,如果要替换多个项,可以再传入第四个、第五个等等项。(注意:插入的项数不需要与删除的项数相等)
-  控制台示例如下:
  var colors = [1, 2, 3];
  //删除
  colors.splice(0,1) // [1]
  colors // [2, 3]
 //替换
  colors.splice(0,1, 'yellow', 'red')  // [2]
  colors // ["yellow", "red", 3]
  //插入
  colors.splice(0, 0, 'aa', 'bb') // []
  colors //  ["aa", "bb", "yellow", "red", 3]

位置方法

  • indexOf() 从数组的开头向后查找
  • lastIndexOf() 从数组的末尾开始向前查找

迭代方法

  • every()
  • filter()
  • forEach()
  • map()
  • some()

缩小方法

  • reduce()
  • reduceRight()
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 161,873评论 4 370
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,483评论 1 306
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,525评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,595评论 0 218
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,018评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,958评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,118评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,873评论 0 208
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,643评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,813评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,293评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,615评论 3 262
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,306评论 3 242
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,170评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,968评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,107评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,894评论 2 278

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,156评论 0 4
  • 数组是值的有序集合。每个值叫做一个元素,而每个元素在数组中有一个位置,以数字表示,称为索引。 JavaScript...
    劼哥stone阅读 1,108评论 6 20
  • 引用类型的值时引用类型的一个实例。在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起。有...
    cooore阅读 256评论 0 1
  • 文章链接地址String类型 String对象的方法也可以在所有基本的字符串值中访问到,其中,继承的 valueO...
    前端精髓阅读 513评论 0 5
  • 大部分公众认为,媒体不能把事实讲清楚,甚至带有政治偏见。 我欢迎你的加盟 我也被你的专注所感动。最后,我要你相信,...
    一子子阅读 1,192评论 0 1