项目经理的奇怪需求 之 数组

1,231 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情

大家好,我是大帅子,今天给大家讲一下伪数组转成真实数组的几种方式吧


概括

首先我们要搞懂伪数组是个啥,伪数组其实就是有真实数组的一样的 下标 长度 元素

梨子: 下面就是一个伪数组有三要素

let obj = {
    0:100,
    1:80,
    2:60,
    3:70,
    4:50,
    5:30,
    length:6
}

1.循环

缺点就是要用循环,代码太长,观赏性不高

  for (let i = 0; i < obj.length; i++) {
    arr.push(obj[i])
  }
  console.log(arr)

2.利用push可以传递多个参数的特点

缺点就是如果要传递多个参数代码冗余

let arr = []
arr.push(obj[0],obj[1],obj[2],obj[3],obj[4],obj[5])
console.log(arr)

3. 利用apply可以传递多个参数的特点

目前的最优解,简单,观赏性高

let arr = []
arr.push.apply(arr,obj)
console.log(arr)

小需求

说是迟那时快,项目经理来了一句,小伙子我看你骨骼惊奇,来我们在不转真实数组的情况下面,怎么进行数组的排序呢? 数组还是之前的那个数组

let obj = {
    0:100,
    1:80,
    2:60,
    3:70,
    4:50,
    5:30,
    length:6
}
1. apply

首先我们还是会惯性的想到这个,这似乎是目前的最优解是吧

let arr = []
arr.push.apply(arr,obj)
arr.sort((a,b)=>a-b)
2. 数组的原型

来,大家跟着我的思路来,首先我们应该知道我们js的作者是把数组的方法封装到了原型里面,所有我们不要那么刻板嘛~ 我们直接可以通过调用原型来解决

Array.prototype

你们看我们这不轻松拿下

image.png

但是我们目前出现了第二个难题

我们如果用原型去调用sort的话,我们的this指向就指向数组的原型是吧,这个时候我们就应该想到改变this的指向,是吧~ 那我们在脑子里面在过一遍,此时call肯定就是最优解

Array.prototype.sort.call(obj,(a,b)=>a-b)
console.log(obj)

此时我们就成了, 心里美滋滋,小小项目经理还想跟我斗~ 不过眼光倒是不错~ 哈哈哈

image.png


好了,这边已经给大家介绍到这里,以上是我自己的理解,希望可以帮到大家, 欢迎留言我这边一定会第一时间给大家解答,喜欢的可以点赞收藏
🐣---->🦅         还需努力!大家一起进步!!!