js常用函数push()、pop()、shift()、unshift()、slice()和splice()等详解

 更新时间:2023年11月03日 09:49:50   作者:风随心飞飞  
这篇文章主要给大家介绍了关于js常用函数push()、pop()、shift()、unshift()、slice()和splice()等的相关资料,js中数组操作函数还是非常多的,今天忽然想到来总结一下,也算是温故而知新吧,需要的朋友可以参考下

前言

最近对前端一些函数的用法还不是很熟悉,有一些函数容易混淆,在此总结一下,同时分享给各位小伙伴:

1. join() 函数

join() 将数组中元素 组成字符串 ,需要传个参数作为连接符,不传的话默认就是逗号。

2.push() 函数

在数组 尾部逐个添加 元素,返回结果数组的长度,能接收任意数量参数,push() 修改了原数组。

3. pop() 函数

pop() 移除数组最后一项,返回的是被移除项。修改原数组

4.shift() 函数

shift() 删除数组的第一项元素,返回被删除的元素, 修改原数组

5.unshift() 函数

向数组的头部添加元素,返回的是结果数组的长度,修改原数组

6.sort() 函数

将数组按照从小到大的顺序排列, 修改原数组 。

注意:

sort()方法是用于数组排序的,语法如下:array.sort(),

使用sort()方法后会改变原数组的顺序(而不是生成一个新数组,同时原数组保持不变)

示例一:对字符数组进行排序

    var myarr1=["h","e","l","l","o"];
    myarr1.sort();
    console.log(myarr1);//(5) ['e', 'h', 'l', 'l', 'o']

1、sort中没有参数时,会按照数组元素对应的ASCII码进行比较和排序

示例二:对数字数组进行排序

    var myarr2=[9,5,1,4,6];
    myarr2.sort();
    console.log(myarr2);//(5) [1, 4, 5, 6, 9]

sort()无法对由两位数以上的数组元素构成的数组进行合理排序

示例

    var myarr2=[10,25,3,8];
    myarr2.sort();
    console.log(myarr2);//10 25 3 8

出现原因和解决方法

因为sort()方法会首先会调用每个数组数据项的toString()方法,

转换成字符串以后再进行比较,在字符串中"25"<“3”,

解决方法是需要用到sort的参数,此时这个参数叫做比较函数

2、sort()的参数——比较函数

示例:使用比较函数将数字数组进行正确排序

 	var myarr2=[10,25,3,8];
    var mycompare=function (x,y){
      if(x<y) return -1;
      else if(x>y) return 1
      else return 0;
    };
    myarr2.sort(mycompare);
    console.log(myarr2);//(4) [3, 8, 10, 25]

比较函数的参数

比较函数会接受两个参数,并对两者进行比较

  • 若第一个参数应位于第二个参数之前,则返回一个负数
  • 若第一个参数等于第二个参数,则返回0
  • 若第一个参数应位于第二个参数之后,则返回一个正数

通过以上逻辑的比较函数,会使数组最后变为升序排列,

若要变为降序,只需返回一个负数变为返回一个正数即可(正数变负数,负数变正数)

比较函数不能对混搭(字符+数字)数组进行排序

  var myarr3=["h",10];
    myarr3.sort(mycompare);
    console.log(myarr3);//(2) ['h', 10]
    myarr3.sort();
    console.log(myarr3);//(2) [10, 'h']

不能将比较函数用于比较一个不能转化成数字的字符串和数组的排序,

这是因为比较函数会先将字符串转化成数字再比较,当字符串不能转换成数字时,就不能比较大小(不用比较函数,也就是sort不加参数时,比较的是ASCII值,此时可以比较)

正确用法:

    // 对于不能转换成数字的字符串(字母型字符串),不使用比较参数,直接比较ASCII值
    var myarr3=["h",10];
    myarr3.sort();
    console.log(myarr3);//(2) ['h', 10]
    // 对于可以转换成数字的字符串(数字型字符串),使用比较函数转换成数字再比较
    var myarr4=["23",37,"1",14];
    myarr4.sort(mycompare);
    console.log(myarr4);//(4) ['1', 14, '23', 37]

总结:

1. 数组中既有字符串又有数字时,先看看其中的字符串是字母型字符串还是数字型字符串,

2. 若是字母型字符串,sort不用带参数,直接比较ASCII值

若是数字型字符串,sort带参数,让比较函数将字符串转换成数字再比较

3.对于由对象构成的数组,如何排序?

需求

数组项是对象,现在需要根据对象的某个属性,对数组进行排序

	//要求根据对象属性age对数组进行排序
    var arr=[
      {age:10,name:'Tom'},
      {age:8,name:'Jack'},
      {age:20,name:'Michel'},
      {age:12,name:'Daniel'},
    ];

解决方法:使用比较函数

    var compare = function (obj1, obj2) {
        if (obj1.age < obj2.age) return -1;
        else if (obj1.age > obj2.age) return 1;
        else return 0;
    } 
    console.log(arr.sort(compare));

效果:

{age: 8, name: 'Jack'}
{age: 10, name: 'Tom'}
{age: 12, name: 'Daniel'}
{age: 20, name: 'Michel'}

7. reverse() 函数

数组反转。

8. concat() 函数

在不影响原数组的情况下,复制了一个数组,将参数添加到副本的尾部,因此若没有传参,就相当于复制了原数组。

9.slice() 函数

slice() 不影响原数组 ,返回原数组指定开始位置 - 结束位置的新数组。 这个位置是数组的下标,当然是从0开始计算,如果只有一个参数,那就是默认第二个参数到尾部。

demo中可以看出,返回的新数组是 不包含 结束位置的那个元素。

如果不传第二个参数,默认返回到最后,也 不包含 最后一个的哦。 参数是 负数,相当于反着来,这时候就是包含了结束位置, 不包含 开始位置的元素。

10. splice() 函数

删除任意项元素,需要两个参数:要删除的位置 和 要删除的数量。

demo中看出,splice()返回被删除的元素数组,原数组被修改了。

插入任意项元素,需要三个参数:要删除的位置,一个不删 和 要插入的元素。

事实证明,是在要插入位置 之前 插入的。

替换,其实就是在指定位置删除任意项元素,再插入任意项元素。

11. indexOf() & lastIndexOf() 函数

查找参数元素在数组中的 位置 ,找不到就返回 -1 。那必传参数一定是目标元素咯,还有个可选参数就是要开始查找的起点位置。 indexOf() 从头到尾找,lastIndexOf() 从尾到头找。

总结

到此这篇关于js常用函数push()、pop()、shift()、unshift()、slice()和splice()等详解的文章就介绍到这了,更多相关js常用函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • js动态生成唯一id的三种方法

    js动态生成唯一id的三种方法

    这篇文章主要介绍了js动态生成唯一id的两种方法,需要的朋友可以参考下
    2023-05-05
  • JS弹出层遮罩,隐藏背景页面滚动条细节优化分析

    JS弹出层遮罩,隐藏背景页面滚动条细节优化分析

    下面小编就为大家带来一篇JS弹出层遮罩,隐藏背景页面滚动条细节优化分析。小编觉得挺不错的,现在分享给大家,也给大家做个参考
    2016-04-04
  • 详解JavaScript中的4种类型识别方法

    详解JavaScript中的4种类型识别方法

    JavaScript中检测对象类型的运算符有:typeof、instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一个说明运算数类型的字符串。下面由小编给大家分享JavaScript中的4种类型识别方法,需要的朋友可以参考下本文
    2015-09-09
  • js实现计算器和计时器功能

    js实现计算器和计时器功能

    这篇文章主要为大家详细介绍了js实现计算器和计时器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • 页面定时刷新(1秒刷新一次)

    页面定时刷新(1秒刷新一次)

    页面定时刷新的示例想必大家也见到不少,在本文将为大家介绍的是,如何实现1秒刷新一次,感兴趣的朋友可以了解下本文
    2013-11-11
  • 微信小程序底部tabBar遮挡内容的简单处理方法

    微信小程序底部tabBar遮挡内容的简单处理方法

    几乎每个app都会用到底部导航的,相对于小程序而言自然也是如此了,这篇文章主要给大家介绍了关于微信小程序底部tabBar遮挡内容的简单处理方法,需要的朋友可以参考下
    2021-08-08
  • 颜色渐变效果

    颜色渐变效果

    [蓝色]颜色渐变效果...
    2006-07-07
  • JavaScript动态绑定详解

    JavaScript动态绑定详解

    这篇文章主要为大家详细介绍了JavaScript动态绑定,关于JavaScript中为元素绑定的事件失效的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • uni-app实现获取验证码倒计时功能

    uni-app实现获取验证码倒计时功能

    这篇文章主要为大家详细介绍了uni-app实现获取验证码倒计时功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • 微信小程序之高德地图多点路线规划过程示例详解

    微信小程序之高德地图多点路线规划过程示例详解

    这篇文章主要介绍了微信小程序之高德地图多点路线规划过程示例详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01

最新评论