今天学习了一下js数组原型的操作方法,小结一下学习地址https://www.cnblogs.com/obel/p/7016414.html

1、join()

join(separator): 将数组的元素组起一个字符串,以separator为分隔符,省略的话则用默认用逗号为分隔符,该方法只接收一个参数:即分隔符。

var arr = [1,2,3];
console.log(arr.join()); // 打印输出1,2,3
console.log(arr.join("-")); // 打印输出1-2-3
console.log(arr); // 打印输出原数组[1, 2, 3]

通过join()方法可以实现重复字符串,只需传入字符串以及重复的次数,就能返回重复后的字符串

function repeatString(str, n) {
return new Array(n + 1).join(str);
}
console.log(repeatString("abc", 3)); // 打印输出abcabcabc,重复3次
console.log(repeatString("Hi", 5)); // 打印输出HiHiHiHiHi,重复5次

2、push()和pop()尾插,尾删

push(): 可以接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度。
pop():数组末尾移除最后一项,减少数组的 length 值,然后返回移除的项。

var arr = ["Lily","lucy","Tom"];
var count = arr.push("Jack","Sean");//添加“Jack”,“Sean”数组
console.log(count); // 最终数组长度为5
console.log(arr); // 打印输出数组["Lily", "lucy", "Tom", "Jack", "Sean"]
var item = arr.pop();
console.log(item); // 移除最后一项Sean
console.log(arr); // 打印输出 ["Lily", "lucy", "Tom", "Jack"]

3、shift()和unshift()头插,头删

shift():删除原数组第一项,并返回删除元素的值;如果数组为空则返回undefined 。
unshift:将参数添加到原数组开头,并返回数组的长度 。

var arr = ["Lily","lucy","Tom"];
var count = arr.unshift("Jack","Sean");
console.log(count); // 最终数组长度为5
console.log(arr); //头部插入元素Jack,Sean打印输出["Jack", "Sean", "Lily", "lucy", "Tom"]
var item = arr.shift();
console.log(item); // 移除第一项Jack
console.log(arr); // 打印输出["Sean", "Lily", "lucy", "Tom"]

4、sort()
sort():按升序排列数组项——即最小的值位于最前面,最大的值排在最后面。
在排序时,sort()方法会调用每个数组项的 toString()转型方法,然后比较得到的字符串,以确定如何排序。即使数组中的每一项都是数值, sort()方法比较的也是字符串,因此会出现以下的这种情况:

var arr1 = ["a", "d", "c", "b"];
console.log(arr1.sort()); // ["a", "b", "c", "d"]
arr2 = [13, 24, 51, 3];
console.log(arr2.sort()); // [13, 24, 3, 51]
console.log(arr2); // [13, 24, 3, 51](元数组被改变)

为了解决上述问题,sort()方法可以接收一个比较函数作为参数,以便我们指定哪个值位于哪个值的前面。比较函数接收两个参数,如果第一个参数应该位于第二个之前则返回一个负数,如果两个参数相等则返回 0,如果第一个参数应该位于第二个之后则返回一个正数。以下就是一个简单的比较函数:

 1 //升序compare
2 function compare1(value1, value2) {
3 if (value1 < value2) {
4 return -1;
5 } else if (value1 > value2) {
6 return 1;
7 } else {
8 return 0;
9 }
10 }
11 arr2 = [13, 24, 51, 3];
12 console.log(arr2.sort(compare1)); // [3, 13, 24, 51]
13
14 //降序compare
15 function compare2(value1, value2) {
16 if (value1 < value2) {
17 return 1;
18 } else if (value1 > value2) {
19 return -1;
20 } else {
21 return 0;
22 }
23 }
24 arr2 = [13, 24, 51, 3];
25 console.log(arr2.sort(compare2)); // [51, 24, 13, 3]

6、concat()
concat() :将参数添加到原数组中。这个方法会先创建当前数组一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组。在没有给 concat()方法传递参数的情况下,它只是复制当前数组并返回副本。

1 var arr = [1,3,5,7];
2 var arrCopy = arr.concat(9,[11,13]);
3 console.log(arrCopy); //[1, 3, 5, 7, 9, 11, 13]
4 console.log(arr); // [1, 3, 5, 7](原数组未被修改)

如果一维数组后加二维数组呢?

1 var arrCopy2 = arr.concat([9,[11,13]]);
2 console.log(arrCopy2); //[1, 3, 5, 7, 9, Array[2]]可以发现第五项变成了一个二维数组
3 console.log(arrCopy2[5]); //[11, 13]但是第五项输出的会继续按原数组输出

7、slice()
slice():返回从原数组中指定开始下标到结束下标之间的项组成的新数组。slice()方法可以接受一或两个参数,即要返回项的起始和结束位置。在只有一个参数的情况下, slice()方法返回从该参数指定位置开始到当前数组末尾的所有项。如果有两个参数,该方法返回起始和结束位置之间的项——但不包括结束位置的项。

 1 var arr = [1,3,5,7,9,11];
2 var arrCopy = arr.slice(1);
3 var arrCopy2 = arr.slice(1,4);
4 var arrCopy3 = arr.slice(1,-2);
5 var arrCopy4 = arr.slice(-4,-1);
6 console.log(arr); //[1, 3, 5, 7, 9, 11](原数组没变)
7 console.log(arrCopy); //只设置一个参数1,从下标1开始输出[3, 5, 7, 9, 11]
8 console.log(arrCopy2); //设置参数1,4,从下标1输出到下标4(不包括4)输出[3, 5, 7]
9 console.log(arrCopy3); //设置参数1,-2,终止下标为负数,当出现负数时,将负数加上数组长度的值(6)来替换该位置的数,因此就是从1开始到4(不包括)的子数组。(我的理解类似于补码一样的)相当于slice(1,4)输出[3, 5, 7]
10 console.log(arrCopy4); //arrCopy4中两个参数都是负数,所以都加上数组长度6转换成正数,因此相当于slice(2,5)输出[5, 7, 9]

8、splice()
splice():很强大的数组方法,它有很多种用法,可以实现删除、插入和替换。
删除:可以删除任意数量的项,只需指定 2 个参数:要删除的第一项的位置和要删除的项数。例如, splice(0,2)会删除数组中的前两项。
插入:可以向指定位置插入任意数量的项,只需提供 3 个参数:起始位置、 0(要删除的项数)和要插入的项。例如,splice(2,0,4,6)会从当前数组的位置 2 开始插入4和6。
替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定 3 个参数:起始位置、要删除的项数和要插入的任意数量的项。插入的项数不必与删除的项数相等。例如,splice (2,1,4,6)会删除当前数组位置 2 的项,然后再从位置 2 开始插入4和6。
splice()方法始终都会返回一个数组,该数组中包含从原始数组中删除的项,如果没有删除任何项,则返回一个空数组。

 1 var arr = [1,3,5,7,9,11];
2 var arrRemoved = arr.splice(0,2);
3 console.log(arr); //删除从下标0开始前两项输出[5, 7, 9, 11]
4 console.log(arrRemoved); //[1, 3]
5 var arrRemoved2 = arr.splice(2,0,4,6);
6 console.log(arr); // 当前数组的位置 2 删除0项,开始插入4和6,输出[5, 7, 4, 6, 9, 11]
7 console.log(arrRemoved2); // []
8 var arrRemoved3 = arr.splice(1,1,2,4);
9 console.log(arr); // 会删除当前数组位置 2 的项,然后再从位置 2 开始插入4和6,输出[5, 2, 4, 4, 6, 9, 11]
10 console.log(arrRemoved3); //[7]

9、indexOf()和 lastIndexOf()
indexOf():接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。其中, 从数组的开头(位置 0)开始向后查找。
lastIndexOf:接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。其中, 从数组的末尾开始向前查找。
这两个方法都返回要查找的项在数组中的位置,或者在没找到的情况下返回-1。在比较第一个参数与数组中的每一项时,会使用全等操作符。

1 var arr = [1,3,5,7,7,5,3,1];
2 console.log(arr.indexOf(5)); //要查找的5在第2项(从0开始)
3 console.log(arr.lastIndexOf(5)); //从后要查找的5在第5项
4 console.log(arr.indexOf(5,2)); //从第二项开始查找5在第2项
5 console.log(arr.lastIndexOf(5,4)); //从后面第四项查找5在2项
6 console.log(arr.indexOf("5")); //没找到字符“5”,所以返回-1

10、forEach()
forEach():对数组进行遍历循环,对数组中的每一项运行给定函数。这个方法没有返回值。参数都是function类型,默认有传参,参数分别为:遍历的数组内容;第对应的数组索引,数组本身。

 1 var arr = [1, 2, 3, 4, 5];
2 arr.forEach(function(x, index, a){
3 console.log(x + '|' + index + '|' + (a === arr));
4 });
5 // 输出为:
6 // 1|0|true
7 // 2|1|true
8 // 3|2|true
9 // 4|3|true
10 // 5|4|true

11、map()
map():指“映射”,对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
下面代码利用map方法实现数组中每个数求平方。

1 var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
2 var arr2 = arr.filter(function(x, index) {
3 return index % 3 === 0 || x >= 8;
4 });
5 console.log(arr2); //[1, 4, 7, 8, 9, 10]

12、filter()
filter():“过滤”功能,数组中的每一项运行给定函数,返回满足过滤条件组成的数组。

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var arr2 = arr.filter(function(x, index) {
return index % 3 === 0 || x >= 8;
});
console.log(arr2); //[1, 4, 7, 8, 9, 10]

13、every()
every():判断数组中每一项都是否满足条件,只有所有项都满足条件,才会返回true。

 1 var arr = [1, 2, 3, 4, 5];
2 var arr2 = arr.every(function(x) {
3 return x < 10;
4 });
5 console.log(arr2); //true
6 var arr3 = arr.every(function(x) {
7 return x < 3;
8 });
9 console.log(arr3); // false
10 1

14、some()
some():判断数组中是否存在满足条件的项,只要有一项满足条件,就会返回true。

1 var arr = [1, 2, 3, 4, 5];
2 var arr2 = arr.some(function(x) {
3 return x < 3;
4 });
5 console.log(arr2); //true
6 var arr3 = arr.some(function(x) {
7 return x < 1;
8 });
9 console.log(arr3); // false

15、reduce()和 reduceRight()
这两个方法都会实现迭代数组的所有项,然后构建一个最终返回的值。reduce()方法从数组的第一项开始,逐个遍历到最后。而 reduceRight()则从数组的最后一项开始,向前遍历到第一项。
这两个方法都接收两个参数:一个在每一项上调用的函数和(可选的)作为归并基础的初始值。
传给 reduce()和 reduceRight()的函数接收 4 个参数:前一个值、当前值、项的索引和数组对象。这个函数返回的任何值都会作为第一个参数自动传给下一项。第一次迭代发生在数组的第二项上,因此第一个参数是数组的第一项,第二个参数就是数组的第二项。
下面代码用reduce()实现数组求和,数组一开始加了一个初始值10。

var values = [1,2,3,4,5];
var sum = values.reduceRight(function(prev, cur, index, array){
return prev + cur;
},10);
console.log(sum); //25

js数组原型方法的更多相关文章

  1. 浅谈6种JS数组遍历方法的区别

    本篇文章给大家介绍一下6种JS数组遍历方法:for.foreach.for in.for of.. each. ().each的区别.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. ...

  2. javascript数组原型方法

    1.javascript数组原型方法. <!DOCTYPE html> <html lang="en"> <head> <meta cha ...

  3. Javascript数组原型方法大全以及实例!!

    数组的方法有数组原型方法,也有从object对象继承来的方法,这里我们只介绍数组的原型方法,数组原型方法主要有以下这些: join() push()和pop() shift() 和 unshift() ...

  4. js数组的方法小结

    js中数组是一种非常常用数据结构,而且很容易模拟其他的一些数据结构,比如栈和队列.数组的原型Array.prototype内置了很多方法,下面就来小小总结一下这些方法. 检测数组就不用多说了,使用EC ...

  5. 再探JS数组原生方法—没想到你是这样的数组

    最近作死又去做了一遍javascript-puzzlers上的44道变态题,这些题号称"JS语言专业八级"的水准,建议可以去试试,这里我不去解析这44道题了, ...

  6. js数组push方法使用注意

    js 数组的push方法,想必大家都知道是向数组末尾添加元素,但是有一个很关键的点需注意: 引自MDN 返回值 当调用该方法时,新的 length 属性值将被返回. var sports = [&qu ...

  7. 数组原型方法调用及函数apply调用时 类数组参数在IE8下的问题

    当函数以 apply 方式调用时, 传参方式是一个由各个参数组成的数组或类数组(一个有length属性的对象),传入参数个数取决于 length 的值,例如,某个对象 args.length=3; a ...

  8. js 数组清空 方法 汇总

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  9. js 数组去重方法汇总

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  10. JS数组遍历方法

    常用数组遍历方法: 1.原始for循环 var a = [1,2,3]; for(var i=0;i<a.length;i++){ console.log(a[i]); //结果依次为1,2,3 ...

随机推荐

  1. 什么是cache

    什么是cacheTo minimize the quantity of control information stored, the spatial locality property is use ...

  2. java 基本知识点

    多线程 加载器 数据结构 内存模型 gc算法

  3. 10 个常用的 JS 工具库,80% 的项目都在用!

    Day.js 一个极简的处理时间和日期的 JavaScript 库,和 Moment.js 的 API 设计保持一样, 但体积仅有2KB. npm install dayjs 基本用法 import ...

  4. 【C++复习】第九章 模板与群体数据(1)

    1.例:求绝对值函数的模板 函数重载方便了函数的使用者,开发者还是要写两个函数 模板是用来生成函数的东西 编译器通过推导生成函数: 2.函数模板定义语法 从例题入手,别上来就扣语法 3.例9-1 函数 ...

  5. vue provide inject 方法

    上级组件: provide() { return { changeSelectOptions: this.changeSelectOptions, switchTabs: () => this. ...

  6. 2022-04-18内部群每日三题-清辉PMP

    1.在为一个有预算限制的项目生成状态报告时,项目经理发现该项目比进度计划落后一周.若要将项目拉回正轨,项目经理应该怎么做? A.重新分配关键路径活动的团队成员. B.向项目发起人要求额外的时间. C. ...

  7. PostScript语言教程(七、条件语句)

    POSTSCRIPT语言中有许多操作符用于制定程序内流的控制.我们在前一章使用了一个repeat运算.所有的控制操作符都使用了之前简要提到的对象类型,即函数,用于我们调用. 7.1.函数 函数(既过程 ...

  8. UF_OBJ_delete_array_of_objects函数vector转数组用法

        1 UF_initialize(); 2 std::vector<tag_t>tool_tag; 3 tag_t ObjectTag = NULL_TAG; 4 int Type, ...

  9. 「SOL」E-Lite (Ural Championship 2013)

    为什么这数据能水到可以枚举角度 ac 啊 # 题面 给你 \(n\) 个平面向量 \((x_i,y_i)\),对于每个 \(k=1\sim n\),求「从给出的 \(n\) 个向量中不重复地选择 \( ...

  10. STM32cubemx-HAL库串口断线问题

    STM32cubemx:version5.1 Chip: STM32F446RE IDE:Keil5 Q:小项目上写了个简单的通信包,波特率230400,数据量较大1600Byte/s,DMA的方式实 ...