资讯专栏INFORMATION COLUMN

每日 30 秒 ⏱ 优雅初始化数组

pcChao / 2658人阅读

简介
数组、初始化、快速生成数组、内存泄露

有时候会需要对数组进行一些初始化,最常用到的便是 for 循环:

let num = [];
for (let i = 0; i < 10; i++) {
    // 做一些其他操作
    // 或者返回一些值
    num[i] = i;
}

其实有一些简单好用的小技巧可以帮助我们优雅的初始化数组:

Array.from

在支持 ES6 的时候可以利用 Array.from() 来初始化数组:

Array.from({ length: 10 }, (val, index) => {
    // 做一些其他操作
    // 或者返回一些值
    return index;
})

Array.from(new Array(10), (val, index)=> {
    // 做一些其他操作
    // 或者返回一些值
    return index;
});
Array.apply

在不支持 ES6 的时候可以利用 Array.apply() 来初始化数组:

Array.apply(null, {length: 10}).map(Function.call, (index, arr) => {
    // 做一些其他操作
    // 或者返回一些值
    return index;
});

const num = Array.apply(null, {length: 5}).map(Function.call, Number);

// 输出 [0, 1, 2, 3, 4]
console.log(num)
spread

当需要快速创建类似 [0, 1, 2, ...N] 这种数组时可以:

const num = [...Array(5).keys()];

// 输出 [0, 1, 2, 3, 4]
console.log(num)
清空数组

除了初始化新的数组,对已有的数组进行清空操作也算半个初始化。如果直接对变量赋予新值 list=[] 虽然说以前清空了数组,但是旧值还放在内存之中,没被垃圾回收机制自动回收的话算是 内存泄露 了:

let first = [1,2,3];
let second = first;

// 清空
first = [];

// 输出 []
console.log(first);

// 输出 [1, 2, 3]
console.log(second);
不再用到的内存,没有及时释放,就叫做内存泄漏。

也可以利用 list.length = 0 来进行操作可以销毁掉数组里的所有内容,也将影响到其他引用。例子:

let first = [1,2,3];
let second = first;

// 清空
first.length = 0;

// 输出 []
console.log(first);

// 输出 []
console.log(second);
一起成长
在困惑的城市里总少不了并肩同行的 伙伴 让我们一起成长。

如果您想让更多人看到文章可以点个 点赞

如果您想激励小二可以到 Github 给个 小星星

如果您想与小二更多交流添加微信 m353839115

本文原稿来自 PushMeTop

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/109242.html

相关文章

  • 每日 30 ⏱ 该不该优雅

    showImg(https://segmentfault.com/img/remote/1460000018734296?w=900&h=500); 简介 可读性、性能、Spread、Reduce 在 优雅三连击 中有同学提到了 可读性 这个关键词,就小二个人的观点 在某个范围内使用比较常用到的小技巧,可以提升一定的可读性,文中提到的短路运算在初始化变量是提升可读性的,并且在很多提倡优化if 语句...

    JohnLui 评论0 收藏0
  • 每日 30 优雅插入数组

    showImg(https://raw.githubusercontent.com/pushmetop/resource/master/30-seconds-for-everyday/insert-item-inside-an-array/poster.png); 简介

    genefy 评论0 收藏0
  • 每日 30 ⏱ 谁敢与我一战

    showImg(https://segmentfault.com/img/remote/1460000018771037?w=900&h=500); 简介 benchmark、基准测试、jsPerf 在 优雅插入数组 一文中大家最多的评论就是 能不能加个基准测试。小二不是不喜欢加基准测试而是现在硬件设备的性能越来越快了,有时候一些操作不是性能问题的主要原因,当然这不是我们不写出好代码的理由。 书写...

    Dionysus_go 评论0 收藏0
  • 每日 30 ⏱ CSV 表格数据转换 JSON 对象

    简介 数组、CSV、表格、工具 showImg(https://segmentfault.com/img/bVbp3L5?w=900&h=500); 我们之前的两期 数组转 CSV 表格数据 和 JSON 对象数组转换 CSV 表格数据 中学习了转化为 CSV 表格数据的代码片段,今天就讲讲 如何把 CSV 表格数据转换为 JSON 对象: // 该源码来自于 https://30secondso...

    livem 评论0 收藏0
  • 每日 30 优雅三连击

    showImg(https://segmentfault.com/img/remote/1460000018709378?w=900&h=500); 简介 短路运算、逗号运算、简化条件语句、初始化小技巧 昨天一个同学在 URL 大爆炸 问了我一个问题:这是什么写法 (data[key] = value, data) 。平时在写文章的时候会把这些技巧稍微提示一下,认为大家都知道这些技巧,引起了小二的...

    Rocture 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<