前端面試題:不使用loop循環,創建一個長度為100的數組,並且每個元素的值等於它的下標,,怎么實現好?


昨天,看這道題,腦子銹住了,就是沒有思路,沒看明白是什么意思?⊙﹏⊙‖∣今天早上起床,想到需要思考一下這個問題。

當然,我沒想明白為什么要這樣做?(創建一個長度為100的數組,並且每個元素的值等於它的下標。)

1.需要創建這樣的一個數組:

1 var array = [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,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99];

這種 “簡單粗暴 通俗易懂” 的答案,肯定不是這道題的“內含”。一個一個輸入,這種方法實現不好。(呆萌的聲明賦值方式)

2.不能使用loop循環()

1 /*
2 前端面試題:不使用loop循環,創建一個長度為100的數組,並且每個元素的值等於它的下標,怎么實現好?
3 */
4 var myArray;
5 myArray = null;
6 
7 var array = new Array(100);

創建一個長度為100的數組,注意該數組的元素並沒有被初始化;

控制台打印結果:

 

生成的是稀疏數組,返回值不是數組,可以叫類數組對象,具有length屬性的對象。

console.log(0 in array);//false

console.log(1 in array);//false,因為下標0,1還未初始化

console.log(array[1]);//undefined 因為數組下標0還未初始化,訪問不存在的屬性返回undefined

javascript並沒有常規的數組,所有的數組其實就是個對象,只不過會自動管理一些 “數字”屬性和length屬性。

javascript中的數組根本沒有索引,因為索引應該是數字,而javascript中數組的索引其實是字符串:array[0] = array["0"]; array[1] = array["1"]; ... array[99] = array["99"];array.length也會變成100.

這些表現的根本原因:javascript中的對象就是字符串到任意值的鍵值對。注意鍵只能是字符串。

我們接下來需要把上面的類數組對象轉換成一個真正的數組。

Array.form():將類數組對象或可迭代對象轉化為數組。

a.參數為數組,返回與原數組一樣的數組

b.參數含有空位,稀疏數組的情況

 到了這里,和上面 "呆萌的聲明賦值" 方式越來越接近了。

/*
前端面試題:不使用loop循環,創建一個長度為100的數組,並且每個元素的值等於它的下標,怎么實現好?
*/
var myArray;
myArray = null;

var array = Array.from(new Array(100));


//map()方法返回一個新數組,數組中的元素為原始數組元素調用函數處理后的值。
//map()方法按照原始數組元素順序依次處理元素
//map()方法不會對空數組進行檢測,也不會改變原始數組
//語法:array.map(function(currentValue,index,arr), thisValue)
//function(currentValue,index,arr):必須函數,數組中的每一個元素都會執行此函數
//currentValue:當前元素的值,在此代碼中就是undefined,
//index:當前元素的索引值
//arr:當前元素屬於的數組對象
array = array.map((item,index)=>index);

控制台打印:

第一種:這是第一種實現方式:Array.from() + array.map

1 Array.from(new Array(100)).map((item,index)=>index);

第二種:Array.from()實現

Array.from()語法:

Array.from(new Array(100), (item, index) => index)

第三種:實現方式 setInterval(function(){},0)

如果不是有人提示:兩種定時器,真的想不到,在這種情況下用定時器。

1 var array = [],
2     i = 0;
3 var interval = setInterval(function() {
4     i < 100 ? array.push(i++) : clearInterval(interval);
5 }, 0);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM