一.数组对象  

 作用:使用单独的变量名来存储一系列的值。

JavaScript中创建数组有两种方式.

(一)使用 Array 构造函数:

 var arr1 = new Array(); //创建一个空数组

 var arr2 = new Array(2); // 创建一个数组并指定长度为2,注意不是上限,是长度(长度不是固定的)

        arr2["name0"]="xdp";//arr2第一个元素arr2["name1"]="gacl";//arr2第二个元素arr2["name2"]="xtxd";//arr2第三个元素,arr2虽然在声明时指明了长度为2,但是还是可以添加超过其指明长度的元素

 var arr3 = new Array(“lily”,“lucy”,“Tom”); // 创建一个包含3个字符串的数组,并初始化数组的内容

(二)使用数组字面量表示法:

var arr4 = []; //创建一个空数组

var arr5 = [20]; // 创建一个包含1项的数组

var arr6 = ["lily","lucy","Tom"]; // 创建一个包含3个字符串的数组

二.数组方法

 数组转换方法         join()栈  (改变原数组)1、push()2、pop  ()队列 (改变原数组)3、push()4、shift()重排序方法(改变原数组)5、reverse()6、sort()操作方法7、数组拼接方法      concat()8、创建子数组方法 slice()9、数组删改方法     splice()  (split)位置方法10、indexOf(search,start)11、lastIndexOf()归并方法reduce( )reduceRight( )迭代方法map()forEach()filter()some()every()
数组转换方法 join(字符串)

join() 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。

Array.join() join()方法只接收一个参数,用作分隔符的字符串,然后返回包含所有数组项的字符串 如果不给join()方法传入任何值,则使用逗号作为分隔符

 var a = [1,2,3];console.log(a.join());         //'1,2,3'console.log(a.join(' '));      //'1 2 3'console.log(a.join(''));       //'123'var b = new Array(10);b.join('-');                  //'---------';9个连字符组成的字符串

若join()方法的参数是undefined,标准浏览器以逗号为分隔符返回字符串,而IE7-浏览器以’undefined’为分隔符返回字符串

toString() -> 可以将一个数组转化成“,”分割的形式,如[1,2,3,4].toString() -> “1,2,3,4”

ps1:如果数组中的某一项的值是null或者undefined,则该值在join()方法返回的结果中以空字符串表示

栈和队列方法

push和pop从数组的尾部添加,从尾部删除。

栈是一种LIFO(Last-First-Out,后进先出)的数据结构,也就是最新添加的项最早被移除。

而栈中项的插入和移除,只发生在一个位置——栈的顶部。栈只能从栈顶操作,半开口。

1.push()方法可以接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度。
var a = [];console.log(a,a.push(1));            //[1] 1console.log(a,a.push('a'));            //[1,'a'] 2console.log(a,a.push(true, {}));   //[1,'a',true,{}] 4console.log(a,a.push([5,6]));      //[1,'a',true,{},[5,6]] 5;数组算一个
2.pop()方法从数组末尾移除最后一项,减少数组的length值,然后返回移除的项。
     var a = ['a', 'b', 'c'];console.log(a,a.pop());           // ['a', 'b'] 'c'console.log(a,a.pop(0));         // ['a', 'b'] 'c'
ps2:给pop参数传其他数字不起作用,也不报错。还是只删除最后一项。 对空数组使用pop()方法,不会报错,而是返回undefined
队列

push从数组尾部添加,shift从数组前端删除。

队列数据结构的访问规则是FIFO(first-in-first-out,先进先出)。 队列在列表的末端添加项,从列表的前端移除项。

3.shift()方法移除数组中的第一个项并返回该项,同时数组的长度减1。
     var a = ['a', 'b', 'c'];console.log(a,a.shift());            //['b', 'c'] 'a'var arr6 = [1];console.log(arr6,arr6.shift());   //[] 1对空数组使用shift()方法,不会报错,而是返回undefinedvar a = [];console.log(a,a.shift());         // [] undefined
4.unshift()方法在数组前端添加任意个项并返回新数组长度。
     var a = ['a', 'b', 'c'];console.log(a,a.unshift('x')); //['x', 'a', 'b', 'c'] 4

当传入多个参数时,是一次性插入。这意味着最终的数组中插入的元素的顺序和它们在参数列表中的顺序一致

     var a = ['a', 'b', 'c'];console.log(a,a.unshift('x','y','z')); //['x','y','z','a', 'b', 'c'] 6

在IE7-浏览器中,unshift()方法的返回值总是undefined

总结:
长的是添加(push,unshift),短的是删除(pop,shift)。
添加的可以接收多个参数并返回增加后数组的长度,删除的一次只能删一个并返回删除项。
删除操作对空数组使用,不会报错,会返回undefined。
都是对原数组进行修改

重排序方法
5.reverse()方法用于反转数组的顺序,返回经过排序之后的数组;而原数组顺序也发生改变
     var array = [1,2,4,3,5];console.log(array,array.reverse());//[5,3,4,2,1] [5,3,4,2,1]var array = ['str',true,3];console.log(array,array.reverse());//[3,true,'str'] [3,true,'str']
6.sort()

(1).没有使用参数, 将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。sort方法会调用每个数组项的toString()方法,然后比较得到的字符串排序,返回经过排序之后的数组,而原数组顺序也发生改变。

     var array = [2,1,4,3,5];console.log(array,array.sort());//[1,2,3,4,5] [1,2,3,4,5]var array = ['3str',3,2,'2'];console.log(array,array.sort());//[2, "2", 3, "3str"] [2, "2", 3, "3str"]如果数组包含undefined元素,它们会被排到数组的尾部sort()方法比较的也是字符串,因此会出现以下的这种情况:var array = [1,5,10,50];console.log(array,array.sort());//[1, 10, 5, 50] [1, 10, 5, 50]为了解决上述问题,sort()方法可以接收一个比较函数作为参数,以便我们指定哪个值位于哪个值的前面。

(2)arrayObject.sort(sortby) 参数可选。规定排序顺序。必须是函数。
比较函数接收两个参数,如果第一个参数应该位于第二个之前则返回一个负数,如果两个参数相等则返回 0,如果第一个参数应该位于第二个之后则返回一个正数。以下就是一个简单的比较函数:

     //升序function com(value1,value2){if(value1<value2){return -1;}else if(value1>value2){return 1;}else{return 0;}}var values=[0,1,3,5,15,10];values.sort(com);alert(values);             //0,1,3,5,10,15//逆序function com1(value1,value2){if(value1<value2){return 1;}else if(value1>value2){return -1;}else{return 0;}}var values=[0,1,3,5,15,10];values.sort(com1);alert(values);         //15,10,5,3,1,0
操作方法(数组拼接方法)
7.concat()方法基于当前数组中的所有项创建一个新数组,先创建当前数组一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组。所以concat()不影响原数组。
如果不给concat()方法传递参数时,它只是复制当前的数组;
var arr = [1,2,3];
console.log(arr,arr.concat());          //[1,2,3] [1,2,3]如果参数是一个或多个数组,则该方法会将这些数组中的每一项都添加到结果数组中;
console.log(arr,arr.concat([6,7,8],[77,33,44]));
//[1, 2, 3] [1, 2, 3, 6, 7, 8, 77, 33, 44]
var arr1 = [4,5,6];
console.log(arr,arr.concat(arr1));       //[1,2,3] [1,2,3,4,5,6]如果传递的值不是数组,这些值就会被简单地添加到结果数组的末尾。
console.log(arr,arr.concat(4,5));        //[1,2,3] [1,2,3,4,5]
console.log(arr,arr.concat(4,[5,[6,7]]));//[1,2,3] [1, 2, 3, 4, 5, [6,7]]

浅拷贝
如果不提供参数,concat()方法返回当前数组的一个浅拷贝。所谓“浅拷贝”,指的是如果数组成员包括复合类型的值(比如对象),则新数组拷贝的是该值的引用。
//该方法实际只复制了数组的第一维。
数组第一维存放的是第二维的引用,而第二维才是实际存放他们的内容

var numbers = [1,2];
var newNumbers = numbers.concat();
console.log(numbers,newNumbers);//[1,2] [1,2]
numbers[0] = 0;
console.log(numbers,newNumbers);//[0,2] [1,2]var numbers = [[1,2]];
var newNumbers = numbers.concat();
console.log(numbers,newNumbers);//[[1,2]] [[1,2]]
numbers[0][0] = 0;
console.log(numbers,newNumbers);//[[0,2]] [[0,2]]
操作方法(创建子数组方法)
8.slice()方法基于当前数组中的一个或多个项创建一个新数组,接受一个或两个参数,最后返回新数组,所以slice()不影响原数组。

slice(start,end)方法需要两个参数start和end,返回这个数组中从start位置到(但不包含)end位置的一个子数组。左闭右开[)。

     var a=[1,2,3,4]console.log(a,a.slice(0,1))     //[1, 2, 3, 4] [1]

如果end为undefined或不存在,则返回从start位置到数组结尾的所有项

     var a=[1,2,3,4];console.log(a,a.slice(0))              // [1, 2, 3, 4]  [1, 2, 3, 4]console.log(a,a.slice(0,undefined))        // [1, 2, 3, 4] [1, 2, 3, 4]

如果没有参数,则返回原数组

     var a=[1,2,3,4];console.log(a,a.slice())               // [1, 2, 3, 4]  [1, 2, 3, 4]

start和end无法交换位置
如果start是负数,则start = max(length + start,0)
如果end是负数,则end = max(length + end,0)

     console.log(a,a.slice(-2,-1))   // [1, 2, 3, 4] [3]console.log(a,a.slice(-2,1)) // [1, 2, 3, 4] []console.log(a,a.slice(-2,3))  // [1, 2, 3, 4] [3]总之,第一个参数<第二个参数

如果不提供参数,slice()方法返回当前数组的一个浅拷贝

slice有个技巧,其实后面两个参数差的值就是数组里留的数量,比如[1,2,3,4,5].slice(1,4),截取出来的数组长度就是3。

操作方法(数组删改方法)
9.splice() 方法用于删除原数组的一部分成员,并可以在被删除的位置添加入新的数组成员,该方法会改变原数组。splice()返回一个由删除元素组成的数组,或者如果没有删除元素就返回一个空数组
如果只提供一个元素,相当于将原数组在指定位置拆分成两个数组
splice()的第一个参数start指定了插入或删除的起始位置。var a=[1,2,3,4]console.log(a,a.splice(1))         //[1] [2, 3, 4]第二个参数number指定了应该从数组中删除的元素的个数。var a=[1,2,3,4]console.log(a,a.splice(1,2))            // [1, 4] [2, 3]如果后面还有更多的参数,则表示这些就是要被插入数组的新元素var a=[1,2,3,4]console.log(a,a.splice(0,0,"1","2"))    //  ["1", "2", 1, 2, 3, 4] []
位置方法
10.indexOf(search,start) 方法接收search和start两个参数,返回search首次出现的位置,如果没有找到则返回-1。 search参数表示要搜索的项;使用严格相等运算符(===)进行比较,返回下标
 var a=[1,2,3,4]a.indexOf(4,0)          //3a.indexOf(5,0)           //-1a.indexOf(4)            //3a.indexOf(4,1)           //3,当start的值小于等于搜索值的下标时,都返回原来的下标a.indexOf(4,4)           //3,当start的值大于搜索值的下标时,都返回原-1
11.lastIndexOf(search,start) 方法与indexOf()不同,lastIndexOf()从右向左查找。 接收search和start两个参数,返回search第一次出现的位置,如果没有找到则返回-1
归并方法

ES5 为数组增加了两个归并数组的方法:reduce( ) 和 reduceRight( ) 。这两个方法都会迭代数组的所有项,然后构建一个最终返回值。 其中 reduce 从第一项开始向后遍历,reduceRight( ) 则从最后一项开始向前遍历。

这两个方法都接收两个参数:一个在每一项上调用的函数和(可选的)作为归并基础的初始值。

传给这两个方法的函数接收四个参数:前一个值,当前值,项的索引和数组对象。这个函数返回的任何值都会作为第一个参数传给下一项。

 var values = [1, 2, 3, 4, 5]// 只传一个函数,不设置归并初始值var res1 = values.reduce(function(prev, cur, index, array){return prev - cur;})// 传两个参数,给定归并初始值var res2 = values.reduce(function(prev, cur, index, array){return prev - cur;}, 5)alert(res1) // -13 1-2-3-4-5=-13alert(res2) // -10 5-1-2-3-4-5=-10
 var values = [1, 2, 3, 4, 5]var res1 = values.reduceRight(function(prev, cur, index, array){return prev - cur;})var res2 = values.reduceRight(function(prev, cur, index, array){return prev - cur;}, 5)alert(res1) // -5  5-4-3-2-1=-5alert(res2) // -10 5-5-4-3-2-1=-10利用以上特性可以求和
迭代方法

有5个迭代方法,每个方法都接收两个参数。第一个参数是一个函数第二个参数是函数的作用域对象(可选)-影响this值,其中第一个参数的函数又有三个参数(item,index,arrSelf)。这5个方法都不会改变数组本身。

详情

https://blog.csdn.net/weixin_44797182/article/details/97031400

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

forEach()方法对数组中的每一项运行给定函数,这个方法没有返回值。本质上与for循环迭代数组一样。如果需要有返回值,一般使用map方法
  forEach()方法除了接受一个必须的回调函数参数,第二个参数还可以接受一个可选的上下文参数(改变回调函数里面的this指向)

filter()方法对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组。该方法常用于查询符合条件的所有数组项
filter()方法还可以接受第二个参数,指定测试函数所在的上下文对象(this对象)

some()方法对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true。并且当且仅当数值中的所有元素调用判定函数都返回false,它才返回false
 在空数组上调用some()方法会返回false

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

javascrit 数组方法总结(数组对象、栈,队列、重排序、操作数组方法、位置方法、归并方法、迭代方法)相关推荐

  1. 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。(js代码)

    1.题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的 ...

  2. 剑指offer:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。

    剑指offer算法题 二分查找,旋转数组最小数字 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素.例如数组[3, ...

  3. 6:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转

    public class Solution {public int minNumberInRotateArray(int [] array) {int min=array[0];for(int i=1 ...

  4. 公平锁非公平锁的实际使用_3. redisson源码公平锁之队列重排序

    一.看源码前的一些说明 1. 这篇文章的源码笔记是基于之前的笔记,所以,这里的当前时间假设,客户端A的过期时间,都需要结合之前的笔记 2. 通过前几篇的笔记,现在有客户端A,B,C三个,假设此时时间已 ...

  5. 数组操作(栈方法、队列方法、重排序等)

    数组 数组是数据的有序列表,数组是引用类型 使用new操作符来创建数组 var arr = new Array(); //创建⼀个空数组 var arr = new Array(10); //创建了⼀ ...

  6. day02--java基础编程:变量,数据类型,类型转换,运算规则,运算符,分支结构,循环(随机数),方法,重载,可变参数,递归,数组,冒泡排序

    1 Day02–变量+数据类型+类型转换 1.1 前言 1.1.1 标识符 可以简单的理解为一个名字.在Java中,我们需要标识代码的很多元素,包括包名.类名.方法.字段.变量等.我们选择的名称就称为 ...

  7. day02--java基础编程:变量,数据类型,类型转换,运算规则,Scanner,运算符,分支结构,循环(随机数),方法,重载,可变参数,递归,数组,冒泡排序

    1 Day02–变量+数据类型+类型转换 1.1 前言 1.1.1 标识符 可以简单的理解为一个名字.在Java中,我们需要标识代码的很多元素,包括包名.类名.方法.字段.变量等.我们选择的名称就称为 ...

  8. TP5.1查询用Db('不含表前缀')/Db::name('不含表前缀')/Db::table('含表前缀')返回数组;model()返回对象

    TP5.1查询用Db(('不含表前缀')/Db::name('不含表前缀')/Db::table('含表前缀')返回数组:model()返回对象 all():可直接传数组查询 select():传数组 ...

  9. jQuery过滤器:筛选jquery对象数组中的DOM对象

    目录 一.定义: 二.基本过滤器: 一.定义: 过滤器就是过滤条件,对已经定位到jquery对象数组中的DOM对象进行过滤筛选,过滤条件不能独立出现在jquery函数,如果使用则只能出现在选择器后方. ...

  10. 查找和排序-——旋转数组的最小数字

    题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一 ...

最新文章

  1. 税前2万4,到手1万4,年终奖扣税方式1月1日起施行~
  2. python 组合数据类型_【Python】组合数据类型
  3. HTML5性能优化需要注意的几个问题
  4. EditText 被遮挡和显示不全问题
  5. 计算机基础知识学前自测,2011计算机二级C语言学前自测题:DOS的基本操作
  6. 22 款设计和可视化神经网络的工具
  7. 电脑开启上帝模式,300多个系统功能都在这里!
  8. 安徽省计算机二级考试教程,安徽省计算机二级自学教程推荐:Office高级应用上机指导(2018年版)...
  9. oracle 监听报错,Oracle启动监听报错:The listener supports no services解决
  10. MySQL空间索引简单使用
  11. 离线CSDN网页打开跳转首页的解决方法
  12. centos7 部署dzzoffice最新版详细教程
  13. 《Caffe Modle Zoo》
  14. 公司新加了一台友宝自动售货机引发的思考-适配者模式
  15. 阿里云 mysql 命令_是mysql命令
  16. ViewData与ViewBag的区别与联系
  17. 校园网、CMCC自动登录
  18. 数据模型|组成要素、概念模型、逻辑模型
  19. wide deep论文-----2016.6.24
  20. Quartz定时器的时间设置

热门文章

  1. GUI编程(一)-----概述
  2. 当债务危机遇上限贷放松 房价投资价值大不如前
  3. sps2013安装错误
  4. 拓端tecdat|R语言深度学习:用keras神经网络回归模型预测时间序列数据
  5. 拓端tecdat|R语言旅行推销员问题TSP
  6. Linux-eval命令
  7. java netty rpc框架_Java编写基于netty的RPC框架
  8. Python基于opencv调用摄像头获取个人图片
  9. Python爬取王者荣耀手游中的游戏英雄角色
  10. 将软件添加到右键菜单 最简单的方法