数组

数组是数据的有序列表,数组是引用类型

使用new操作符来创建数组

var arr = new Array(); //创建⼀个空数组
var arr = new Array(10); //创建了⼀个包含10个元素的数组
var arr = new Array('你好') //创建了⼀个数组,并且分配好了元素
var arr = new Array(10,10); //创建了⼀个数组,并且分配好了两个元素,内容分别都是10

可以省略new操作符

var arr = Array(); //省略new操作符,不推荐

使用字面量的方式创建数组

var arr = []; //创建⼀个空数组
var arr = [10] //单纯的创建了⼀个包含⼀个元素,内容为10的数组;
var values = [1,2,]; // 不要这样!这样会创建⼀个包含2 或3 项的数组
var options = [,,,,,]; // 不要这样!这样会创建⼀个包含5 或6 项的数组
var group = ['胡颖','何润宏','李志豪','候华雨','谢凯伦','张家顺','吴旭'];

使用索引下标来读取数组的值

//单个读取
group[0] //胡颖
//可以通过下标值来修改对应的数组字段
group[3] = '虚位以待' //修改第四个元素
group[6] = '⼴告招租' //修改第七个元素
//遍历获取
for (var index = 0; index < group.length; index++) {var name = group[index]; document.write("<p>"+name+"</p>") //所有⼈
}

使用length属性来获取数组元素的量

alert(group.length) //获取元素的个数
group.length = 10; //强制设置元素的个数
group[group.length] = '好好学习'
group[group.length] = '天天向上' //可以通过length属性给数组末尾增加⼀个元素
console.log(group)

创建⼀个相对稍微复杂⼀点的数组

var users = ['苏松青',{name:"阿杰",arr:[function(){return '呵呵'}]},new Object(),100+100,[{name:"1",fn:function(){return this.name}},['咖啡很好喝',function(){return [{name:"奶茶也不错"}]}]]
]

数组最多可以包含4 294 967 295个项,这几乎已经能够满⾜任何编程需求了

转换方法toLocaleString()、toString()和valueOf()

var arr = ['看⼈承⾕','下不魂','是⼀相']; //字⾯量数组
alert(arr.toString()) //显式调⽤toString()
alert(arr.valueOf()) //返回的结果是和toString()一致
alert(arr) //隐式调⽤toString()
alert(arr.toLocaleString()) //本地化效果

在这⾥,我们⾸先显式地调⽤了toString()⽅法,以便返回数组的字符串表⽰,每个值的字符串表⽰拼接成了⼀个字符串,中间以逗号分隔。接着调⽤valueOf()⽅法,⽽最后⼀⾏代码直接将数组传递给了alert()。由于alert()要接收字符串参数,所以它会在后台调⽤toString()⽅法,由此会得到与直接调⽤toString()⽅法相同的结果。

另外,toLocaleString()⽅法经常也会返回与toString()和valueOf()⽅法相同的值,但也不总是如此。当调⽤数组的toLocaleString()⽅法时,它也会创建⼀个数组值的以逗号分隔的字符串。⽽与前两个⽅法唯⼀的不同之处在于,这⼀次为了取得每⼀项的值,调⽤的是每⼀项的toLocaleString()⽅法,⽽不是toString()⽅法。请查看官⽅⽰例:

var person1 = { toLocaleString : function () {return "Nikolaos"; },toString : function() {return "Nicholas"; }
};
var person2 = { toLocaleString : function () {return "Grigorios"; },toString : function() {return "Greg"; }
};
var people = [person1, person2];
alert(people); //Nicholas,Greg
alert(people.toString()); //Nicholas,Greg
alert(people.toLocaleString()); //Nikolaos,Grigorios

数组继承的toLocaleString()、toString()和valueOf()⽅法,在默认情况下都会以逗号分隔的字符串的形式返回数组项。⽽如果使⽤join()⽅法,则可以使⽤不同的分隔符来构建这个字符串。**join()**⽅法只接收⼀个参数,即⽤作分隔符的字符串,然后返回包含所有数组项的字符串。

var people = ['Nicholas', 'Greg'];
var result = people.join(",");
var result = people.join(" | ");
alert(result) //Nicholas | Greg

在这⾥,我们使⽤join()⽅法重现了toString()⽅法的输出。在传递逗号的情况下,得到了以逗号分隔的数组值。⽽在最后⼀⾏代码中,我们传递了竖线符号,结果就得到了字符串"red|green|blue"。如果不给join()⽅法传入任何值,或者给它传入undefined,则使⽤逗号作为分隔符。IE7 及更早版本会错误的使⽤字符串"undefined"作为分隔符。

如果数组中的某⼀项的值是null或者undefined,那么该值在join()、toLocaleString()、toString()和valueOf()方法返回的结果中以空字符串表示。

栈方法

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

var arr = ['爽宝','爽哥','21','前端']
var length = arr.push('湖北武汉','未婚');
console.log(length) //查看返回的数组⻓度
console.log(arr) //查看修改后的数组

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

var arr = ['爽宝','爽哥','21','前端']
var removeEL = arr.pop();
console.log(removeEL)
console.log(arr) //查看删除后的数组

队列方法

栈数据结构的访问规则是LIFO(后进先出),⽽队列数据结构的访问规则是FIFO(First-In-First-Out,

先进先出)

由于push()是向数组末端添加项的方法,因此要模拟队列只需一个从数组前端取得项的方法。实现这⼀操作的数组方法就是shift(),它能够移除数组中的第一个项并返回该项,同时将数组长度减1。

var arr = ['爽宝','爽哥','21','前端'];
arr.push('湖北武汉');
console.log(arr)
alert(arr.shift()) // 爽宝
console.log(arr) //["爽宝", "爽哥", "21", "湖北武汉"]

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

var arr = ['爽宝','爽哥','21','前端'];
arr.unshift('湖北武汉','前端') //在数组的前端添加两个项
console.log(arr)
arr.pop() //移除数组的末尾项
console.log(arr)

重排序方法

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

var arr = [1,2,4,5,6,7,8];
console.log(arr.reverse()) //8, 7, 6, 5, 4, 2, 1
console.log(arr) //8, 7, 6, 5, 4, 2, 1 说明是引⽤

sort()方法按升序排列数组项——即最小的值位于最前面

var arr = [3,4,76,2,6,2,6,87,2,564,2,5,61,0]
console.log(arr.sort()) //0, 2, 2, 2, 2, 3, 4, 5, 564, 6, 6, 61, 76, 87
console.log(arr) //0, 2, 2, 2, 2, 3, 4, 5, 564, 6, 6, 61, 76, 87 说明是引⽤

操作方法

**concat()**方法可以基于当前数组中的所有项创建一个新数组。

var arr = ['爽宝','爽哥','21','前端'];
var newarr = arr.concat('fdg') //创建新数组,并添加新元素
newarr.pop()
console.log(arr) //原数组没有任何变化
console.log(newarr)

1.删除:可以删除任意数量的项,只需指定2 个参数:要删除的第⼀项的位置和要删除的项数。例如,splice(0,2)会删除数组中的前两项。

var arr = ['爽宝','爽哥','21','前端'];
var newarr = arr.splice(0,2) //截取前两位
console.log(newarr) //返回截取的元素,创建新数组
console.log(arr) //源数组被截取的元素被删除了

2.插入:可以向指定位置插入任意数量的项,只需提供3 个参数:起始位置、0(要删除的项数)和要插入的项。如果要插入多个项,可以再传入第四、第五,以⾄任意多个项。例如,splice(2,0,“red”,“green”)会从当前数组的位置2 开始插入字符串"red"和"green"。

var arr = ['爽宝','爽哥','21','前端'];
splice(起始位置,0,插入的项)
var newarr = arr.splice(2,0,'我想要新增元素') //没有截取,但是插入了⼀条
console.log(newarr) //创建新空数组,在第⼆个位置插入了⼀条数据
console.log(arr) //这⾥输出的是源数组

3.替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定3 个参数:起始位置、要删除的项数和要插入的任意数量的项。插入的项数不必与删除的项数相等。例如,splice(2,1,“red”,“green”)会删除当前数组位置2 的项,然后再从位置2 开始插入字符串"red"和"green"。

// splice替换功能
var arr = ['爽宝','爽哥','21','前端'];
var newarr = arr.splice(2,1,'39') //截取⼀条,⼜插入了⼀条
console.log(newarr) //创建新数组 36,在第⼆个位置插入了⼀条数据
console.log(arr) //这⾥输出的是源数组

splice()方法始终都会返回一个数组,该数组中包含从原始数组中删除的项(如果没有删除任何项,则返回⼀个空数组)。下面的代码展示了上述3种使用splice()方法的方式。

数组操作(栈方法、队列方法、重排序等)相关推荐

  1. 数组API 栈与队列方法

    1.1.栈与队列方法 Array.prototype.push() push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度. 注意: 新元素将添加在数组的末尾. 注意: 此方法改变数组的长 ...

  2. DSt:数据结构的简介、最强学习路线(逻辑结构【数组-链表-栈和队列/树-图-哈希】、物理结构、数据运算【十大排序/四大查找-图三大搜索-树三大遍历】、高级算法【贪心/分治/动态规划】之详细攻略

    DSt:数据结构的简介.最强学习路线(逻辑结构[数组-链表-栈和队列/树-图-哈希].物理结构[元素/关系].数据运算[十大排序/四大查找-图三大搜索-树三大遍历].高级算法[贪心/分治/动态规划]) ...

  3. JavaScript数据结构与算法(1)(数组、栈、队列、链表)(ES6)

    注意:原教学视频:JavaScript(ES6)数据结构和算法 | JavaScript数据结构与算法 (都是CoderWhy老师的教学) 原作者(笔记)链接:JavaScript 数据结构与算法 | ...

  4. 算法练习day7——190325(比较器、不基于比较的排序、maxGap、数组实现栈和队列、minStack)

    1.比较器 1.1 Arrays.sort() Arrays.sort(数组) 若其中的数组元素时自定义类型,报错: 若为基本类型,则按值排序. Arrays.sort(数组,自己定义的比较器): 会 ...

  5. 剑指offer 算法(栈和队列 查找和排序)

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解析:用栈来模拟队列.我们首先插入一个元素a到stack1中,再压入两个元素bc,此时栈中有元素abc, ...

  6. Leetcode(1)——数组、栈、队列

    格式: 题号+题名+简单思路+code T1: 两数之和 不考虑去重,只找出第一个解:使用哈希表记录出现过的数字,O(N)时间复杂度 func twoSum(nums []int, target in ...

  7. 数组模拟栈和队列板子

    使用数组模拟数据结构栈和队列 栈:后进先出 对于栈:我们使用tt表示栈顶的下标,如果tt==0表示栈空 队列:先进先出 对于队列,我们使用hh表示队首,tt表示队尾,tt初始化为-1,判断队列是否为空 ...

  8. Data Structure_数组_栈_队列_链表_霍夫曼

    数组 数组在编码中很常见,就是把数据码成一排存放. 这就表示一个数组,这个数组有八个元素存放.对于元素的获取,主要就是通过下标获取,所以索引对于数组是很重要的,这个索引可以是有意义的,也可以是没有意义 ...

  9. DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台、刷题集合、问题为导向的十大类刷题算法(数组和字符串、栈和队列、二叉树、堆实现、图、哈希表、排序和搜索、动态规划/回溯法/递归/贪心/分治)总

    DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台.刷题集合.问题为导向的十大类刷题算法(数组和字符串.栈和队列.二叉树.堆实现.图.哈希表.排序和搜索.动态规划/回溯法/递归/贪心/分治)总 ...

  10. 数据结构与算法第二章 线性表、栈、队列、数组、字符串、树、二叉树、哈希表的增删查

    03 增删查:掌握数据处理的基本操作,以不变应万变 通过前面课时的学习,相信你已经建立了利用数据结构去完成时空转移的思想.接下来,你需要在理论思想的指导下灵活使用.其实,要想灵活使用数据结构,你需要先 ...

最新文章

  1. [YY题]HDOJ5288 OO’s Sequence
  2. chromium浏览器_全新Edge浏览器上线,Chromium内核,可通过Windows Update更新
  3. 数字化转型战略中不可忽视“软因素”
  4. QML 性能优化建议(一)
  5. 【ARM】Tiny4412裸板编程之MMU(页 4K)
  6. HDU 2570 迷瘴
  7. java aio复制文件_java复制文件的4种方式及拷贝文件到另一个目录下的实例代码...
  8. SpringBoot 整合 RabbitMQ 实践
  9. SQL内连接-外连接join,left join,right join,full join
  10. IT职场人生系列之十九:危险职业(中)
  11. 苹果电脑屏幕刷新率如何调整
  12. 平时多流汗,战时少流血
  13. DELL 笔记本 触摸板 驱动安装 与 禁用启动
  14. 清华大学计算机系招生数量,清华大学报考信息出炉,计算机报考人数最多,有些专业无人报考...
  15. SpringDataJPA(二):SpringDataJPA的运行原理以及基本操作
  16. 编译原理_P1003
  17. IDEA修改静态资源(html)不重启,即时生效
  18. 美眉都是可爱的…… (美图)
  19. appinventor飞机大战案例_第一个AppInventor 开发案例 Hello Kitty(下)
  20. Facebook路由事故未圆,何以元宇宙?

热门文章

  1. 解决 WARNING: Published ports are discarded when using host network mode 问题
  2. 移动增值业务随笔(2)
  3. java制作媒体播放器_用Java构造自己的媒体播放器
  4. java.io.IOException: Incomplete output stream
  5. Nature communications:VWFA,一个集语言与注意于一身的脑区
  6. 调查上网行为管理软件或设备
  7. 校园跳蚤市场信息管理c语言,C语言 习题课.ppt
  8. 电脑服务器协议,电影服务器协议、架设及防范配置介绍 -电脑资料
  9. Kubernetes工作实用命令集结号
  10. STM32 PWM输出原理和直流电机PWM驱动原理详解及例程