Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
例
假設你需要生成一個從0到99的數組。你要怎么做呢?下面是一種解法:
const arr=[]; for (let i=0; i < 100; i++) { arr[i]=i; }
如果你和我一樣,看到這種使用傳統的for循環的方式會有點不大習慣了。事實上,我已經好多年不使用for循環寫代碼了。畢竟,各種高階函數,像forEach, map, filter, reduce足以讓我寫出各種漂亮的代碼。
也許你還沒有沉醉于函數式編程的美妙,那么你會認為上面的解法足矣。不過,如果你用過高階函數編程,你也許就會想:一定還有更加優雅的實現方法。
我的第一直覺就是:首選創建一個長度為100的空數組,然后由map用index去初始化每一個元素。在JavaScript中,你可以用Array構造函數來創建數組:
const arr=Array(100);
接下來你只需要用map就可以解決問題了:
const arr=Array(100).map((_, i)=> i); console.log(arr[0]===undefined); // true
可是,為什么第一個元素不是0而是undefined?
解釋
為了理解為何沒有生效,我需要首先講清楚一個非常重要的技術點。在內部,JavaScript數組實際上是對象,對象里面的屬性名是數字,對應數組的下標。舉個例子:
['a', 'b', 'c']
它實際上等價于:
{ 0: 'a', 1: 'b', 2: 'c', length: 3 }
當你去訪問數組的第0個元素的時候,實際上訪問的是對象中屬性名為0的元素。接下來我們會解釋為何剛剛的代碼沒有效果。
當你使用Array構造函數來新建一個數組,那么它會創建一個新的數組對象,并且將長度length設定為指定的值。但是,對象里面沒有數組索引:
{ //no index keys! length: 100 }
當你去訪問數組的第0個元素的時候,返回值為undefined。但并不是指第0個元素得值為undefined,而是當數組下標不存在的時候,默認的返回值。
并且如果數組下標不存在的話,其實map函數并沒有真正的對每一個元素執行操作。因為只有當下標存在的時候,map的回調函數才會執行。
解法
因此,我們只需要在數組對象中構造出數組的下標就可以了。最好的方法就是用展開運算符:
const arr=[...Array(100)].map((_, i)=> i); console.log(arr[0]); // 0
使用展開運算符后的數組對象:
{ 0: undefined, 1: undefined, 2: undefined, ... 99: undefined, length: 100 }
就可以順利使用map函數了。
關于Fundebug
Fundebug專注于JavaScript、微信小程序、小游戲BUG監控,自從2016年雙十一正式上線,Fundebug已經服務了一年半時間,累計處理了5億+錯誤事件,得到了眾多知名用戶的認可。Fundebug支持主流前端框架的bug監控,歡迎各位老鐵體驗!
補充一個方法:
Array.from({length: 100}, (_, i)=> i);
解決。
上熱搜!
百度地圖崩了!
今天下午
不少網友表示
百度地圖突然出現定位錯誤
自駕路線無法正常規劃等問題
甚至有人吐槽
“找不到回家的路”
對此
百度地圖表示
“您反饋的問題
已經加速修復中
各地區服務在逐步恢復中”
你手機上的百度地圖
還能使用嗎?
遇到這種導航失靈的情況
你又是怎么做的呢?
綜合自微博、小紅書
來源: 新聞110
靈的高德導航讓人氣憤。
從松山紀念館出來就進入了這種小石子路,好難走,20公里時速走的慢慢的。因為高德地圖能設置車的寬度和高度,所以開房車以后就改用了高德地圖。也不知道高德地圖怎么導航的,導了這樣的一條爛路,還說是最佳路線。
在廣州的時候也試過兩三次,帶我們走一些很小很小的路,左繞右繞,繞了好久,到了以后才知道原來就是一條很好走的大路。帶我們繞了半天,開了一個多差不多兩個小時才走了五六十公里,終于可以上高速了。
一上高速碰到檢查站,設置的是高速路線,結果走了100多公里,要讓我們下高速了。導航路線顯示高速就在前面,但是走來走去怎么也上不回高速。走了200多公里,山路和國道跨過了整個大理古城,終于在晚上9點多上到高速了。
一上高速,第一個服務區就停車做吃的了。今天一起從松山出發的車友也遇到了導航失靈,晚上就在這個服務區駐車。早上吃完飯就往白沙鎮出發,中午終于到了白沙鎮。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。