版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/arthurwanggang/article/details/66970494
不使用循环,如何创建一个长度为100的数组,并且数组的每一个元素是该元素的下标?
今天一朋友圈发现在一问题,讲真是,没有循环还真不知道如何实现,不过有问题提出了,肯定是有解决的方案,有了搜多引擎还有什么解决不了的问题吗?来吧。学习一下吧
首先看看for循环的实现
var s = [];
for(var i=0; i<100;i++){
s[i]=i
}
console.log(s);
或者是
var s = [];
for(var i=0;i<100;i++){
s.push(i);
}
console.log(s);
这样就很easy的得到了0-99的数组。
不用循环,如何搞定呢
第一种:Object.key()
var creatArray = Object.keys(Array.apply(null,{length: 100}));
console.log(creatArray);
既然apply都这么嚣张,call呢?
写100个有点多….,区别他们的参数就可以了。
var creatArray = Object.keys(Array.call(null,1,2,3,4,5,6,7,8,9));
console.log(creatArray);
稍微停下:看看上面的Object.keys(obj)到底是什么?此刻就想到我大MDN,在MDN文档中这样说
The Object.keys() method returns an array of a given object's own enumerable properties, in the same order as that provided by a for...in loop (the difference being that a for-in loop enumerates properties in the prototype chain as well).
什么意思呢?就是说Object.keys()会返回一个数组,一个什么样的数组呢?就是对象自身可枚举属性组成的数组。数组中属性名的排列顺序个使用for..in..循环遍历该对象是返回的顺序是一样的,不过for..in..循环还会枚举原型上的属性。(所有元素是字符串)
OK,回到主题上,现在得到的数组内部元素是字符串而不是数字,好家伙,来转化一下吧
var creatArray = Object.keys(Array.call(null,1,2,3,4,5,6,7,8,9)).map(function(item){
return +item
});
console.log(creatArray);
var creatArray = Object.keys(Array.apply(null,{length: 100})).map(function(item){
return +item
});
console.log(creatArray);
好家伙,这样就得到了,注意+的作用。
好了好了,不能再延伸了,牵扯隐式转换的东西了。有机会在研究。
回归正题:继续上面的例子。
方法二: Array.from()
var arrNew = Array.from({length: 100},(v,k)=>k);
console.log(arrNew );
这玩意好像是ES6的东西了,虽然还不会,今天顺便学习一下(下次学习一下ES6)。
方法三:Array.keys()获取数组的key值。
var arr = new Array(100).keys();
console.log(Array.from(arr));
貌似ES6有很多的方法,不写了,现在没理解。弄弄其他的吧.
方法四:setInterval
var s = [];
var i = 0;
var pushArray = setInterval(function(){
s[i] = i++
if (i >= 100){
clearInterval(pushArray);
console.log(s);
}
},1);
递归调用
var s = [];
var i =0;
function array(num){
if(i<100){
s[i] = i++
array(num);
}
return s;
}
console.log(array(100));
改一下上面其中的一种方法:
var s = new Array(100).toString().split(',').map(function(item,index){
return index;
});
console.log(s);
能力有限,只能理解这么多了。一定还有其他的方法。在学习。