JavaScript中的伪数组/数组与伪数组的转换/伪数组的用处

伪数组是什么

伪数组是类似数组的、具有length属性的、按照索引存储数据的对象
JavaScript中常见的伪数组有:普通函数的arguments对象、DOM的各个节点集合。

数组和伪数组的区别

举个例子:
在这里插入图片描述
可以看到二者的prototype不同。

  • 伪数组并不是数组,它没有继承 Array.proptotype,只是看着像数组。
  • 伪数组不能调用数组的pushconcatfilterfind等方法。
  • 伪数组不能使用 forEach来遍历。
  • 可以通过Array.isArray()来判断是否为数组。

将伪数组转换为数组

使用Array原型的slice方法复制伪数组,并通过call改变this指向到arguments,这样arguments就可以使用数组的slice方法了。

// ------test----------
  function test(a,b){
    // [a,b]是arguments 伪数组
    const arr = Array.prototype.slice.call(arguments);
    console.log("arguments:",arguments);
    console.log("arr:",arr);
  }
  test(1,2);

在这里插入图片描述

伪数组的使用

  • 遍历DOM元素。可以使用for循环遍历DOM。
  • 访问函数参数arguments。arguments是伪数组,可以用于访问并实现可变参数函数。

这里写一个通过伪数组实现距离现在事件最近的12个月,并以xxxx年xx月、xxxx-xx形式返回日期,可以用于项目数据的整理。

//近一年的每个月的月份显示
export const monthArr = Array.from({length:12},(k,v)=>{
  //substract前推v个月
  const monthDate = moment().subtract(v,'month');
  return{
    value:monthDate.format('YYYY-MM'),
    label:monthDate.format('YYYY年MM月')
  }
})

{length:12}是一个伪数组对象。这里Array.from({length:12})就是一个长度为5,元素都是undefined的数组,然后第二个参数是给每个项目调用的函数,返回monthArr。打印出来是这样的:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值