2015-08-29 34 views
-1

我試圖扭轉這個數組的內容,但結果是從數組中的值減去2出於某種原因。顛倒數組內容時奇怪的錯誤

爲什麼會發生這種情況的任何想法?

代碼:

function reverseArray(array) { 
    var newArray = []; 
    for (i = array.length-1; i >= 0; i--) { 
    newArray.push(array.indexOf(i)); 
    }; 
    return newArray; 
}; 

var testArray = ["Zach", 2, 3, 4, 5]; 
var result = reverseArray(testArray); 
console.log(result); 
+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf – melpomene

+0

調試您的代碼。在'newArray.push'行放置一個斷點。在那裏,檢查'array.indexOf(i)',看看它是否是你想要的。修復你的代碼,漂洗並重復。或者,只需使用'Array#reverse'。 –

+0

@torazaburo:LOL!當我評論時,我的確在寫我的答案。 :-) –

回答

2

newArray.push(array.indexOf(i));推動陣列中i的值的索引(如果它的存在),或-1如果不是。例如,它正在尋找值4,3,2,10,並且如果它找到它們,則將它找到它們的索引推入到新數組中。

爲了更好地理解,稍微改變你的函數,然後通過它在調試步驟:

function reverseArray(array) { 
    var newArray = []; 
    for (i = array.length-1; i >= 0; i--) { 
    var newValue = array.indexOf(i); 
    newArray.push(newValue);  // <=== Put a breakpoint on this line 
    }; 
    return newArray; 
} 

然後通過與調試步驟,並在指定的行,看看每個newValue值通過循環的時間。 (有內置瀏覽器強大的調試器。)

你只是想newArray.push(array[i]);


旁註:你也想聲明你i變量;目前,你正在墮入The Horror of Implicit Globals

備註2:在函數聲明之後或者在連接到for循環的塊之後,不要放置;

+0

那麼元模式教學的人如何去釣魚呢? –

+0

@torazaburo:我解釋了發生了什麼,然後想,我會回過頭去告訴他們他們是怎麼想出來的。你可能沒有看到第二點。這是真正令人驚歎的時機,我點擊保存編輯,你的評論出現在問題上。 :-) –