Javscript数组中最常用的方法(建议收藏)(1)

js中数组的方法不管是写原生还是用框架,我们都会经常运用到,以及也有一些面试官会问到甚至让我们手写一个数组的排序函数;

所以我就通过查找一些好的文章做了一篇对数组方法的归纳包括:数组的基本操作方法、排序方法、转换方法以及es6中的迭代方法;

操作方法

===================================================================

数组的一些操作方法,也无非就是增、删、改、查:

push()

push()方法接收任意数量的参数,并将它们添加到数组末尾,返回数组的最新长度,对原数组有影响;

let people = []; // 创建一个数组

let count = people.push(“张三”, “李四”); // 推入两项

console.log(count) // 2

unshift()

unshift()在数组开头添加任意多个值,然后返回新的数组长度,对原数组有影响;

let people = new Array(); // 创建一个数组

let count = colors.unshift(“张三”, “李四”); // 从数组开头推入两项

alert(count); // 2

splice()

传入三个参数,分别是开始位置、0(要删除的元素数量)、插入的元素,返回空数组,对原数组有影响;

let people = [“张三”, “李四”, “王二”];

let removed = colors.splice(1, 0, “麻子”)

console.log(colors) // 张三,麻子,李四,王二

console.log(removed) // []

concat()

首先会创建一个当前数组的副本,然后再把它的参数添加到副本末尾,最后返回这个新构建的数组,不会影响原始数组;

let people = [“张三”, “李四”, “王二”];

let people2 = people .concat(“麻子”, [“王朝”, “马汉”]);

console.log(people ); //[“张三”, “李四”, “王二”];

console.log(people2); // [“张三”, “李四”, “王二”, “麻子”, “王朝”, “马汉”]

pop()

pop() 方法用于删除数组的最后一项,同时减少数组的length 值,返回被删除的项,对原数组有影响;

let people = [“张三”, “李四”];

let item = people.pop(); // 取得最后一项

console.log(item) // 李四

console.log(people.length) // 1

shift()

shift()方法用于删除数组的第一项,同时减少数组的length 值,返回被删除的项,对原数组有影响;

let people = [“张三”, “李四”];

let item = people.shift(); // 取得第一项

console.log(item) // 张三

console.log(people.length) // 1

splice()

传入两个参数,分别是开始位置,删除元素的数量,返回包含删除元素的数组,对原数组有影响;

let people = [“张三”, “李四”, “王二”];

let removed = people.splice(0,1); // 删除第一项

console.log(people ); // [“李四”, “王二”]

console.log(removed); // [“张三”],只有一个元素的数组

slice()

slice() 方法以新的数组对象,返回数组中被选中的元素,选择从给定的 start 参数开始的元素,并在给定的 end 参数处结束,但不包括。不会影响原始数组;

let people = [“张三”, “李四”, “王二”, “麻子”, “王朝”];

let people2 = people.slice(1);

let people3 = people.slice(1, 4);

console.log(people) // [“张三”, “李四”, “王二”, “麻子”, “王朝”]

concole.log(people2); // [“李四”, “王二”, “麻子”, “王朝”]

concole.log(people3); // [“李四”, “王二”, “麻子”]

修改原来数组的内容,常用splice()

splice()

splice()传入三个参数,分别是开始位置,要删除元素的数量,要插入的任意多个元素,返回删除元素的数组,对原数组产生影响

let people = [“张三”, “李四”, “王二”];

let removed = people.splice(1, 1, “麻子”, “王朝”); // 插入两个值,删除一个元素

console.log(people ); // [“张三”, “麻子”, “王朝”, “王二”];

console.log(removed); //[“李四”],只有一个元素的数组

即查找元素,返回元素坐标或者元素值

  • indexOf()

  • includes()

  • find()

indexOf()

返回要查找的元素在数组中的位置,如果没找到则返回-1

let numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];

numbers.indexOf(4) // 3

includes()

返回要查找的元素在数组中的位置,找到返回true,否则false

let numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];

numbers.includes(4) // true

find()

返回第一个匹配的元素

const people = [

{

name: “Matt”,

age: 27

},

{

name: “Nicholas”,

age: 29

}

];

people.find((element, index, array) => element.age < 28) // // {name: “Matt”, age: 27}


排序方法

===================================================================

数组本身有两个方法可以用来对元素重新排序:

  • reverse()

  • sort()

定义排序函数:

  • 冒泡排序

  • 插入排序

  • 递并排序

  • 计数排序

reverse()

顾名思义,将数组元素方向排列

let values = [1, 2, 3, 4, 5];

values.reverse();

alert(values); // 5,4,3,2,1

sort()

sort()方法接受一个比较函数,用于判断哪个值应该排在前面

如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

1.若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。

2.若 a 等于 b,则返回 0。

3.若 a 大于 b,则返回一个大于 0 的值。

function compare(value1, value2) {

if (value1 < value2) {

return -1;

} else if (value1 > value2) {

return 1;

} else {

return 0;

}

}

let values = [0, 1, 10, 5, 15];

values.sort(compare);

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

冒泡排序

排序规则:比较相邻元素,符合比较条件,交换位置较大的往后排,反复比较交换,直到所有数据都符合排序条件,得出排序效果,结束排序。

排序动态示意:

在这里插入图片描述

var arr = [3,4,1,2,21,5,15,6,63];

function BubbleSort(ary){

for(var i = 0; i < ary.length - 1; i++){

for(var j = i + 1; j < ary.length; j++){

var current = ary[i];

if(current > ary[j]){

var tmp = ary[j];

ary[j] = current;

ary[i] = tmp;

}

}

}

return ary;

}

1

BubbleSort(arr); // [1, 2, 3, 4, 5, 6, 15, 21, 63]

插入排序

排序规则:插入排序得比喻成斗地主,手里摸牌之后都是按照从小到大的顺序。每摸到一张牌就把他们插入到合适的位置,使得他们比后面小,比前面大或者相等。

排序动态示意:

在这里插入图片描述

var arr = [3,4,1,2,21,5,15,6,63];

function InsertSort(ary){

var temp;

for (var i = 1; i < ary.length; i++) {

for (var j = i-1; j >=0; j–) {

if (ary[j+1] < ary[j]) {

temp = ary[j+1];

ary[j+1] = ary[j];

ary[j] = temp;

} else if (ary[j+1] >= ary[j]) {

break;

}

}

}

return ary;

}

InsertSort(arr); // [1, 2, 3, 4, 5, 6, 15, 21, 63]

递并排序

排序规则:将长的数组分解为短的数组,一直分到最后,单个单个数组比较,我们就认为,只有一个元素的数组是有序的。然后再逐个的合并。

排序动态示意:

在这里插入图片描述

var arr = [3,4,1,2,21,5,15,6,63];

function MergeSort(ary) { //采用自上而下的递归方法

var len = ary.length;

if(len < 2) {

return ary;

}

var middle = Math.floor(len / 2),

left = ary.slice(0, middle),

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
厂,18年进入阿里一直到现在。**

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-lMBI5j6t-1715534161854)]

[外链图片转存中…(img-EPaWANOJ-1715534161854)]

[外链图片转存中…(img-7qiK5pF2-1715534161855)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值