不使用循环,如何创建一个长度为100的数组,并且数组的每一个元素是该元素的下标?

版权声明:本文为博主原创文章,未经博主允许不得转载。 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);

能力有限,只能理解这么多了。一定还有其他的方法。在学习。

猜你喜欢

转载自blog.csdn.net/arthurwanggang/article/details/66970494