創(chuàng)建一個長度為x數(shù)組

原題描述:

不使用 loop 循環(huán)盖高,創(chuàng)建一個長度為 100 的數(shù)組卧蜓,并且每個元素的值等于它的下標(biāo)
這個問題的一些變種例如給一個長度 length 和 value烦秩,返回長度為 length 值全為 value 的數(shù)組等粒蜈。

1.誤區(qū)

最容易掉入陷阱的:

var arr = new Array(100);
  arr = arr.map(function(item, index) {
  return index;
});
// (100) [empty × 100]

2.解釋

坑在 Array(100)荷憋,可以看看MDN的規(guī)范。
在 47版本 Chrome 下(或者早些的 Chrome 版本)承绸,new Array(10) 會返回[ undefined,undefined,undefined,…….(100) ]裸影,
但這個 undefined 又跟你直接聲明的 [ undefined,undefined,undefined,…….(100) ] 不同

[ null, null ].map((item, index) => index);      // [ 0, 1 ]
[ undefined, undefined ].map((item, index) => index);      // [ 0, 1 ]

const b =new Array(100);
b.map((item, index) => index);    // (100) [empty × 100]

3.正確的解決

其實(shí)這道題的面試官當(dāng)時是說不用loop的情況下的解決方案,用Array方法的話其實(shí)都是屬于loop八酒,目的是考察遞歸:

1. 遞歸+自執(zhí)行函數(shù)
var arr = [];
(function dfs(i) {
  if (i < 100) {
    arr.push(i);
    dfs(++i);
  }
}(0));
2. 轉(zhuǎn)化成字符串
Array(100).join(",").split(",").map(function(key,index) { return index })
3. apply轉(zhuǎn)換一下空民,可以看到j(luò)s的大多數(shù)坑的解決都有apply的身影。羞迷。界轩。
Array.apply(null, Array(100)).map((item,index) => index)

apply 在 es5 可以加類數(shù)組對象,在傳入的時候衔瓮,由于每一項(xiàng)的值都是不存在的浊猾,相當(dāng)于進(jìn)去的是 undefined(這里的 undefined 是真真切切的 undefined 。热鞍。葫慎。)

4. Int8Array
new Int8Array(100).map((item,index) => index)

Int8Array的規(guī)范可以看相關(guān)文檔

補(bǔ)充的解法

第一種
var ary = [];
ary.valueOf = function() {
    ary.push(ary.length)
    ary.length<100 && +ary
}
+ary
  • js 里的 + 號在不同表達(dá)式里有不同含義
  • 在這里,是加號
  • 加號后面跟一個數(shù)組薇宠,觸發(fā)了隱式轉(zhuǎn)換
  • 數(shù)組的隱式轉(zhuǎn)換包含兩個偷办,toString 和 valueOf,根據(jù)數(shù)組的隱式轉(zhuǎn)換規(guī)則澄港,這里調(diào)用 valueOf
  • 但是 ary 的 valueOf 被改寫了椒涯,改成了看到的那個函數(shù),那個函數(shù)里每次會給 ary 新加一個與下標(biāo)相同的元素
  • 如果下標(biāo)還沒到 100回梧,就再 +ary 一次废岂,相當(dāng)于又調(diào)用了一次 valueOf
  • 于是就形成了遞歸
第二種
[...Object.keys(window).slice(0, 100)].map((v, i) => i);
// (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, 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]

轉(zhuǎn)載 https://blog.csdn.net/major_zhang/article/details/79616974

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市狱意,隨后出現(xiàn)的幾起案子湖苞,更是在濱河造成了極大的恐慌,老刑警劉巖详囤,帶你破解...
    沈念sama閱讀 211,423評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件财骨,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)隆箩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,147評論 2 385
  • 文/潘曉璐 我一進(jìn)店門滑肉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人摘仅,你說我怎么就攤上這事∥食” “怎么了娃属?”我有些...
    開封第一講書人閱讀 157,019評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長护姆。 經(jīng)常有香客問我矾端,道長,這世上最難降的妖魔是什么卵皂? 我笑而不...
    開封第一講書人閱讀 56,443評論 1 283
  • 正文 為了忘掉前任秩铆,我火速辦了婚禮,結(jié)果婚禮上灯变,老公的妹妹穿的比我還像新娘殴玛。我一直安慰自己,他們只是感情好添祸,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,535評論 6 385
  • 文/花漫 我一把揭開白布滚粟。 她就那樣靜靜地躺著,像睡著了一般刃泌。 火紅的嫁衣襯著肌膚如雪凡壤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,798評論 1 290
  • 那天耙替,我揣著相機(jī)與錄音亚侠,去河邊找鬼。 笑死俗扇,一個胖子當(dāng)著我的面吹牛硝烂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播狐援,決...
    沈念sama閱讀 38,941評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼钢坦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了啥酱?” 一聲冷哼從身側(cè)響起爹凹,我...
    開封第一講書人閱讀 37,704評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎镶殷,沒想到半個月后禾酱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,152評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,494評論 2 327
  • 正文 我和宋清朗相戀三年颤陶,在試婚紗的時候發(fā)現(xiàn)自己被綠了颗管。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,629評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡滓走,死狀恐怖垦江,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情搅方,我是刑警寧澤比吭,帶...
    沈念sama閱讀 34,295評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站姨涡,受9級特大地震影響衩藤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜涛漂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,901評論 3 313
  • 文/蒙蒙 一赏表、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧匈仗,春花似錦瓢剿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至哗蜈,卻和暖如春前标,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背距潘。 一陣腳步聲響...
    開封第一講書人閱讀 31,978評論 1 266
  • 我被黑心中介騙來泰國打工炼列, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人音比。 一個月前我還...
    沈念sama閱讀 46,333評論 2 360
  • 正文 我出身青樓俭尖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親洞翩。 傳聞我的和親對象是個殘疾皇子稽犁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,499評論 2 348