昨天,看這道題,腦子銹住了,就是沒有思路,沒看明白是什么意思?⊙﹏⊙‖∣今天早上起床,想到需要思考一下這個問題。
當然,我沒想明白為什么要這樣做?(創建一個長度為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);