美文网首页
快速填充数组里的思考

快速填充数组里的思考

作者: 袁韩 | 来源:发表于2016-05-23 21:19 被阅读127次

用一行代码,快速填充一个数组

function fillArray(length, placeholder) {
  return Array.apply(null, Array(length)).map(()=>placeholder)
}

然而用下面的语句却不可以

Array(length).map(()=>placeholder)

Array(length)返回的结果与预想不一样

检查Array(length)的返回结果,发现其,是一个长度为length的数组,从0length-1都未定义。使用var arrWithHoles = Array(3)var arrWithHoles = [, , ,]等效。而我们预想中这个数组应该是var arr = [undefined,undefined, undefined]

两者的差别好比是var foo = {0: undefined}; console.log(foo[0])var foo = {}; console.log(foo[0])的差别

那些数组中未定义的索引,姑且称之为hole

使用Array.prototype.map遍历一个带有hole的数组,map方法会自动过滤hole。这是应该的,因为map不知道未定义的索引是什么(不可能凭空猜想吧),它只知道遍历的数组有多长,已定义的索引是什么,哪怕这些索引的值是undefined

apply与map函数工作方式不同

Array内置遍历函数有些会跳过hole,比如forEachmap,有些会报错,比如reduce,有些似乎没有影响,比如every

Function.prototype.apply的作用机制与Array内置函数不同。apply要求两个参数,第二个参数argsArray必须是一个数组。在Array.apply(null, Array(length))里,Array(length)应该经历了类似于如下的处理

var argsArray = Array(length)
var ret = []
var i
for (i = 0; i < argsArray.length; i++) {
  ret[i] = argsArray[i]
}

所以Array.apply(null, Array(length))返回的结果是一个长度为length的数组,从0到length-1的值都为undefined。

map方法知道这个数组从0到length-1都有定义。虽然这些索引的值都是undefined,但是这不重要。重要的是map知道它应该处理这些索引,因为这些索引都被声明了,然后取它们的undefined值及其他信息,运行map函数,返回一个新的数组。

最后Array.apply(null, Array(length)).map(()=>placeholder)返回的结果就是一个长度为length的数组,从0到length-1索引的值都为placeholder。完美!

相关文章

  • 快速填充数组里的思考

    用一行代码,快速填充一个数组 然而用下面的语句却不可以 Array(length)返回的结果与预想不一样 检查Ar...

  • 数组里填充对象

    当我们需要在数组中填充数据的时候 一般会想到什么方法??没错 是Array.fill()可是当我们用这个方法去填充...

  • Excel快速填充读懂你的心

    Excel快速填充读懂你的心 快速填充何必难为公式 快速填充—六大用法 注意 快速填充何必难为公式 听说你还在绞尽...

  • Excel中的有1个非常好用的功能,你知道吗?

    1. 快速填充 简介 快速填充是office 2013版本后,新增的一个功能。快速填充,是根据用户输入的第一单元格...

  • 《偷懒的技术-打造财务excel达人》读书笔记

    操作 快速填充序列 按住ctrl,再用填充柄,就会填充序列. 快速复制/移动 直接左键拖动,就是移动并覆盖; 按住...

  • 今日复盘

    【今日完成】 写作作业打卡 反馈写作 -统计表格数 快速阅读 【明日计划】: 1.填充问题(找答案,写综述) 2...

  • 办公必备技能: 在Excel多单元格中一次性填充相同内容

    连续单元格内一次性填充方法 场景如图:需要在B列中,都填充“陈晨”。如何快速实现填充? 方法一:双击实现快速填充。...

  • Excel02快速填充邮件合并

    快速填充的技巧 迅速填充值1-100000选择单元格-填充-序列-列-等差序列 几种填充的基本操作批量填充数字/日...

  • 快速填充法

    ①提取字符 打开员工信息表,在提取【姓】表格数列下,输入第一个人名的姓,鼠标点击下一个单元格,点击快捷...

  • 排序算法(PHP实现)

    冒泡排序 两两比较, 讲逆序的两个数交换位置 快速排序 选择一个基准元素, 讲数组里的数与之比较, 区分出比之大的...

网友评论

      本文标题:快速填充数组里的思考

      本文链接:https://www.haomeiwen.com/subject/iyoarttx.html