这段时间着实是忙,整整一个月没有写东西了。今天有个小需求,是要创建一个小于当前小时的自然数数组。想了想可以顺手写一篇充充数。

其实生成一个从 0 开始的包含 n 个连续自然数数组好像没啥难度,一个for就能解决:

1
2
3
4
5
let arr = [];
for (let i = 0; i < n; i++) {
arr.push(i);
}
return arr;

但是看上去好像写得挺长的,于是看了下文档,发现 Array.form 的接口也可以实现相同的目的:

1
Array.from({ length: n }, (item, idx) => idx);

一行搞定。

思路在于,先通过 Array 生成相对应长度的数组,再通过获取数组下标获取连续的自然数数组。

分析一下,首先 Array.form({ length: n }) 创建了一个长度为 n,元素为 undefined 的数组。虽然里面都是 undefined,但是我们需要的是自然数,使用数组下标就能解决,于是使用接口中第二个参数,传入一个 map 方法,就可以获取到数组下标了。

那么获取完一个完整的数组了,接下来获取小于当前小时数的数组就简单了:

1
2
3
4
let now = new Date();
return Array.from({ length: 24 }, (item, idx) => idx).filter(hour => {
return hour < now.getHours();
});

以上。