标签: web JavaScript python
https://www.zhihu.com/question/41493194
这里说明一下,这题我早就见过很相似的题目,不用循环,创建一个长度为500,每个元素都为m的数组。
当时,我就确定了两个思路,一个是使用递归(至今都不会),一个是使用map。做法:
1 | Array(100).map(e=>"m") |
结果,当然是出错了,数组是(100) [empty × 100],这样的数组每个元素是undefined,是不能改变的。这样的数组叫稀释数组!直到今天,我在GitHub上看到这样的代码。
1 | const chunk = (arr, size) => |
一开始我就懵了,这是闹哪样啊?我可没见过这样的es6语法啊,后在MDN上看Array.from的准确用法看到这样的例子。1
2Array.from({length: 5}, (v, i) => i);
// [0, 1, 2, 3, 4]
灵机一动,这不就是我积压已久问题的答案吗?1
Array.from({length: 500}, (v) => "m");
后来进行搜索到了知乎(逼乎),看到上面的链接,才知道上面是神仙打架。比较相似和简洁的答案1
2
3
4
5
6
7Array.from(Array(100).keys())
or
[...Array(100).keys()]
递归写法:1
2
3
4
5
6
7
8
9
10
11function reduce(prev, curr) {
if (curr >= 100) {
return prev
}
prev.push(curr)
return reduce(prev, curr + 1)
}
var arr = reduce([], 0)
console.log(arr);
也有写一大串字符串,再用.split(‘’)组成数组(密集数组),再替换的(不推荐不简洁)1
2
3'1'.repeat(100).split('').map((e,i)=>e=i);
Array(100).fill(0).map((item,index)=>index);
很搞事的idea
1<<24,也就是1向左移24位,也就是2的24次方,一共有25位,每个数组匹配4个1111,这样就有长度为100的字符串。1
(1<<24).toString(2).replace(/\d/g,'1111').split('').map((e,i)=>e=i);
贴个python的来捣乱1
print range(1,101)
还有很多方法,我还没有去研究,不过现在还是去看GitHub吧,远离逼乎!