整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          Array構(gòu)造的數(shù)組使用map為何失效?

          Array構(gòu)造的數(shù)組使用map為何失效?

          假設(shè)你需要生成一個從0到99的數(shù)組。你要怎么做呢?下面是一種解法:

          const arr=[];
          for (let i=0; i < 100; i++) {
           arr[i]=i;
          }
          

          如果你和我一樣,看到這種使用傳統(tǒng)的for循環(huán)的方式會有點不大習(xí)慣了。事實上,我已經(jīng)好多年不使用for循環(huán)寫代碼了。畢竟,各種高階函數(shù),像forEach, map, filter, reduce足以讓我寫出各種漂亮的代碼。

          也許你還沒有沉醉于函數(shù)式編程的美妙,那么你會認為上面的解法足矣。不過,如果你用過高階函數(shù)編程,你也許就會想:一定還有更加優(yōu)雅的實現(xiàn)方法。

          我的第一直覺就是:首選創(chuàng)建一個長度為100的空數(shù)組,然后由map用index去初始化每一個元素。在JavaScript中,你可以用Array構(gòu)造函數(shù)來創(chuàng)建數(shù)組:

          const arr=Array(100);
          

          接下來你只需要用map就可以解決問題了:

          const arr=Array(100).map((_, i)=> i);
          console.log(arr[0]===undefined); // true
          

          可是,為什么第一個元素不是0而是undefined?

          解釋

          為了理解為何沒有生效,我需要首先講清楚一個非常重要的技術(shù)點。在內(nèi)部,JavaScript數(shù)組實際上是對象,對象里面的屬性名是數(shù)字,對應(yīng)數(shù)組的下標(biāo)。舉個例子:

          ['a', 'b', 'c']
          

          它實際上等價于:

          {
           0: 'a',
           1: 'b',
           2: 'c',
           length: 3
          }
          

          當(dāng)你去訪問數(shù)組的第0個元素的時候,實際上訪問的是對象中屬性名為0的元素。接下來我們會解釋為何剛剛的代碼沒有效果。

          當(dāng)你使用Array構(gòu)造函數(shù)來新建一個數(shù)組,那么它會創(chuàng)建一個新的數(shù)組對象,并且將長度length設(shè)定為指定的值。但是,對象里面沒有數(shù)組索引:

          {
           //no index keys!
           length: 100
          }
          

          當(dāng)你去訪問數(shù)組的第0個元素的時候,返回值為undefined。但并不是指第0個元素得值為undefined,而是當(dāng)數(shù)組下標(biāo)不存在的時候,默認的返回值。

          并且如果數(shù)組下標(biāo)不存在的話,其實map函數(shù)并沒有真正的對每一個元素執(zhí)行操作。因為只有當(dāng)下標(biāo)存在的時候,map的回調(diào)函數(shù)才會執(zhí)行。

          解法

          因此,我們只需要在數(shù)組對象中構(gòu)造出數(shù)組的下標(biāo)就可以了。最好的方法就是用展開運算符:

          const arr=[...Array(100)].map((_, i)=> i);
          console.log(arr[0]);
          // 0
          

          使用展開運算符后的數(shù)組對象:

          {
           0: undefined,
           1: undefined,
           2: undefined,
           ...
           99: undefined,
           length: 100
          }
          

          就可以順利使用map函數(shù)了。

          關(guān)于Fundebug

          Fundebug專注于JavaScript、微信小程序、小游戲BUG監(jiān)控,自從2016年雙十一正式上線,F(xiàn)undebug已經(jīng)服務(wù)了一年半時間,累計處理了5億+錯誤事件,得到了眾多知名用戶的認可。Fundebug支持主流前端框架的bug監(jiān)控,歡迎各位老鐵體驗!

          補充一個方法:

          Array.from({length: 100}, (_, i)=> i);

          解決。

          上熱搜!

          百度地圖崩了!

          今天下午

          不少網(wǎng)友表示

          百度地圖突然出現(xiàn)定位錯誤

          自駕路線無法正常規(guī)劃等問題

          甚至有人吐槽

          “找不到回家的路”

          對此

          百度地圖表示

          “您反饋的問題

          已經(jīng)加速修復(fù)中

          各地區(qū)服務(wù)在逐步恢復(fù)中”

          你手機上的百度地圖

          還能使用嗎?

          遇到這種導(dǎo)航失靈的情況

          你又是怎么做的呢?

          綜合自微博、小紅書

          來源: 新聞110

          靈的高德導(dǎo)航讓人氣憤。

          從松山紀(jì)念館出來就進入了這種小石子路,好難走,20公里時速走的慢慢的。因為高德地圖能設(shè)置車的寬度和高度,所以開房車以后就改用了高德地圖。也不知道高德地圖怎么導(dǎo)航的,導(dǎo)了這樣的一條爛路,還說是最佳路線。

          在廣州的時候也試過兩三次,帶我們走一些很小很小的路,左繞右繞,繞了好久,到了以后才知道原來就是一條很好走的大路。帶我們繞了半天,開了一個多差不多兩個小時才走了五六十公里,終于可以上高速了。

          一上高速碰到檢查站,設(shè)置的是高速路線,結(jié)果走了100多公里,要讓我們下高速了。導(dǎo)航路線顯示高速就在前面,但是走來走去怎么也上不回高速。走了200多公里,山路和國道跨過了整個大理古城,終于在晚上9點多上到高速了。

          一上高速,第一個服務(wù)區(qū)就停車做吃的了。今天一起從松山出發(fā)的車友也遇到了導(dǎo)航失靈,晚上就在這個服務(wù)區(qū)駐車。早上吃完飯就往白沙鎮(zhèn)出發(fā),中午終于到了白沙鎮(zhèn)。


          主站蜘蛛池模板: 无码精品人妻一区| 中文乱码字幕高清一区二区| 一区二区日韩国产精品| 无码精品人妻一区二区三区漫画| 日韩精品一区二区三区不卡| 人妻AV一区二区三区精品| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 国产在线精品一区二区不卡| 蜜桃传媒一区二区亚洲AV| 国产在线精品一区二区三区直播| 中文字幕一区二区三区精彩视频| 天码av无码一区二区三区四区 | 国产肥熟女视频一区二区三区| 一区二区三区无码视频免费福利 | 中文字幕VA一区二区三区| 国产精品亚洲综合一区在线观看| 国产无套精品一区二区| 视频在线观看一区二区三区| 亚洲av无码一区二区三区人妖| 一区二区精品视频| 一本一道波多野结衣一区| 亚洲一区二区电影| 中文字幕亚洲乱码熟女一区二区 | 亚洲国产一区二区三区在线观看| 国模大尺度视频一区二区| 精品在线一区二区| 天天视频一区二区三区| 精品一区二区视频在线观看| 性色av一区二区三区夜夜嗨| 中文字幕日本精品一区二区三区 | 亚洲日本中文字幕一区二区三区 | 亚洲AV无码一区二区三区在线| 好吊视频一区二区三区| 一区二区3区免费视频| 国产精品一区二区香蕉| 精品国产日韩亚洲一区91| 中文字幕一区日韩精品| 日本一区二区免费看| 国精无码欧精品亚洲一区| 国产一区在线视频| 成人免费一区二区三区|