處理for in用在陣列上時候出現的詭異現象的問題

2021-09-16 13:04:43 字數 1422 閱讀 1140

var arr = ['a', 'b', 'c'];

var sid = ['go'];

for (var key in arr)

console.log(sid)

很簡單的問題,最後的輸出結果卻是:

[ 'go', , , , , , , , , , , 'b', , , , , , , , , , 'c' ]
通過上面的輸入結果我們可以發現這麼幾個問題:

sid裡面多了很多空項,length明顯的增多了

arr[0]的值在sid中沒有出現

問題1:sid裡面多了很多空項,length明顯的增多了

略過痛苦的分析步驟直接來重點內容:

通過列印key + 1我們可以找到問題的關鍵。通過列印我們可以得到如下資訊。

在第一次迴圈的時候key + 1的值為01,此後依次為:11,21

通過這個我們可以判斷:這個key其實是乙個string型別的

所以上面的步驟相當於:

sid['01'] = arr[0];

sid['11'] = arr[1];

sid['21'] = arr[2];

note: for..in 不應該被用來迭代乙個下標順序很重要的 array .

可能就包含這種情況吧。

問題2:arr[0]的值在sid中沒有出現

arr[0]的值其實通過sid['01']可以取到。

此外,在node下列印sid的時候可能與在console中列印出現不同的結果。

對於陣列的遍歷,最好使用:foreach,map,some,filter,find等方法。尤其是是這種牽扯到陣列下標的盡量不要使用for-in來處理,如果非要使用可以做如下處理:

var arr = ['a', 'b', 'c'];

var sid = ['go'];

for (var key in arr)

console.log(sid)

以避免如上的問題。

Ajax請求在資料量大的時候出現超時的解決方法

最近在用extjs做專案,在載入資料量特別大的時候會出現載入超時現象,在fb下檢視,原來是ext預設ajax請求30秒。在網上搜到下面的解決方法,以備參考和其他人參考。extjs做ajax請求的時候,預設的相應時間是30秒,如果後來資料查詢時間超過30秒,extjs就會報錯。這就需要修改extjs的...

python處理陣列時候冒號的妙用

定義乙個numpy模組 import numpy as np x np.array 1,2,3 5,6,7 7,8,9 print x out 64 array 1,2,3 5,6,7 7,8,9 現在用冒號完成反轉 print x 1 out 65 3 2 1 7 6 5 9 8 7 x 1 這段...

在陣列中找到出現頻率大於1 4的數

演算法的核心思想很簡單,每次刪去不同的4個數,最後剩下的元素有可能是頻繁項。假設陣列有15個元素,若乙個元素的出現頻率大於1 4,其必須出現4次。不妨設陣列為,d表示刪去該數。我們來模擬一下演算法的過程。第一次 1d,2d,1,4d,1,4,2,9d,1,7,4,3,9,4,3 剩下 1,1,4,2...