不使用迴圈,如何建立乙個長度為100的陣列

2022-03-06 15:37:35 字數 2877 閱讀 4456

問題描述:在不使用迴圈的條件下,如何建立乙個長度為100的陣列,並且陣列的每乙個元素是該元素的下標?

這是乙個比較經典的前端面試題,也可以當筆試題,咋一看,好像難度不大,實際上考察的知識點還不少,值得寫篇文章來備忘!廢話不多說,直接進入正文!

為了理解這道題的意思,我們先用傳統的方法來實現一下:

使用for方法:

var arr = new array(100);

for(var i=0;i)

console.log(arr);

或者是:

var arr = new

array();

for(var i=0;i<100;i++)

console.log(arr);

可以得到乙個0-99的陣列,使用while,do while也可以實現,這裡就不寫了,那不用迴圈,怎麼得到呢?

第一種:object.keys()

但是這裡得到的陣列是乙個字串陣列,不是數字,所以我們需要再加工一下,字串轉數字的方法就很多了,這裡用map()方法:

(item));

console.log(arr);

+號是乙個轉換格式的小技巧,你也可以使用parseint

第二種:array.from()

var arr = array.from(, (v,k) =>k);

console.log(arr);

這裡使用的array.from()方法,從類陣列或可迭代的物件建立乙個新陣列,你不懂用法,去查查吧!

第三種:array.keys()

var arr = new array(100).keys();

console.log(array.from(arr));

這裡主要使用array.keys()方法,獲取陣列的key值

第四種:object.keys() 與 array.from()

var arr = object.keys(array.from());

console.log(arr);

這種方式建立的也是乙個字串陣列,所以需要轉一下,方式跟第一種一樣

var arr = object.keys(array.from()).map(function

(item));

console.log(arr);

實現原理大致說一下,先用array.from得到乙個100值為undefined的陣列,然後獲取陣列的key值,最終返回乙個陣列,不明白的可以仔細領會一下第二種和第三種

第5種:使用...擴充套件運算子

var arr = [...array(100).keys()];

console.log(arr);

或者可以改寫成:

var arr = [...array.from().keys()];

console.log(arr);

不熟悉擴充套件運算子的可以去es6教程裡面看一下,這裡就不介紹了

第6種:使用string()方法,比較特別

var arr = object.keys(string(array(101)));

console.log(arr);

這裡需要用101位,為什麼?因為在建立乙個100個值的陣列的時候,因為是空值陣列,在將陣列轉成字串的時候,實際上是存的空值之間的逗號(,),2個值才有乙個逗號,3個值有2個逗號,以此類推,100個值需要101位,然後用object.keys()

方法轉成陣列,弄懂前面的方法的應該知道,此時的陣列是乙個字串陣列,所以還需要安裝方法一處理一下:

var arr = object.keys(string(array(100))).map(function

(item));

console.log(arr);

第7種:使用int8array(),比較偏門

var arr = object.keys(new int8array(100)).map(function

(item));

console.log(arr);

需要了解原理的同學,建議看一下int8array()的api

第8種:setinterval方法,感覺更偏門了

var arr =;

var i = 0;

var timer = setinterval(function

() },1);

通過定時器的思路,給陣列賦值,確實很妙

第9種:受定時器啟發,可以用遞迴呼叫

var arr =;

var i = 0;

function

makearray(num)

return

arr;

}console.log(makearray(100));

第10種:可以使用第七種的變種,請看:

var arr = new array(100).tostring().split(',').map(function

(item,index));

console.log(arr);

我覺得這個知識點給出10種方法,應該差不多了,但是方法遠遠不止這10種,比如說擷取網頁中的100個字元,然後獲取索引,比如說用二進位制等等,奇淫巧技數不勝數,這裡就不一一贅述了!

我覺得乙個話題或者說乙個命題,能夠牽扯出別的知識點,學習到更多的技巧,那這個命題就是有價值的,也是有意義的,不想多說了,一張圖結束今天的話題!

不用迴圈,es6建立乙個長度為100的陣列

問題描述 在不使用迴圈的條件下,如何建立乙個長度為100的陣列,並且陣列的每乙個元素是該元素的下標?結果為 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,3...

C語言 不使用迴圈判斷乙個數是否為2的N次方

對於判斷乙個數是否為2的n次方問題,通常想到的最為直接的辦法就是對這個數不斷對2取餘,為0就將該數變為該數除以2,直到最後該數為1為止。void judge int n printf no n return 不過上面的方法並不是較好的方法,其實還有更為簡潔高效的方法 乙個整數,若是2的n次方,有沒有...

Qt 為自己的程式建立乙個訊息迴圈

at any time,you can create a qeventloop object and call exec on it to start a local event loop.from within the event loop,calling exit will force exec...