我正在研究名爲SecondGreatLow的coderbyte挑戰。我們給出一個數組作爲參數,並且應該返回給定數組的第二個最低#和第二個最高#。Javascript:難以分析在for循環中包含indexOf的代碼
我正在使用別人的代碼 - 我正在分析/逆向工程它,但我很困惑的一部分。這裏是代碼:
function SecondGreatLow(arr) {
var unique = [arr[0]];
for(var i = 1; i < arr.length; i++) {
if (unique.indexOf(arr[i]) == -1) {
unique.push(arr[i]);
}
}
unique.sort(function(a,b){return a - b});
var smallest = unique[1].toString();
unique.reverse();
var largest = unique[1].toString();
return smallest + " " + largest;
}
我有困難與代碼的第一半 - 特別是indexOf語句。
從閱讀黑白線看代碼的下半部分,我相信代碼的第一個上半部分是擺脫所有重複值? - 所有剩餘的非重複值被彈出到唯一數組中,然後我們得到第二低(唯一[1])和第二高(反向數組上的唯一[1])值。
但是,這是什麼if語句呢?
我知道如果indexOf == -1,那麼這意味着找不到特定的項目。
但是,如果我們走通一步一步來......
var unique = [arr[0]];
^這是採取第1個要素的值在給定的陣列/參數,並將其存儲在一個名爲陣列「獨特的」
然後有一個for循環開始於索引1(而不是0)
for(var i = 1; i < arr.length; i++) {
^所以,for循環通過這是作爲一個參數(提供,而不是通第原始數組運行e唯一陣列)。但是,這是從哪裏獲得confused-
if (unique.indexOf(arr[i]) == -1) {
unique.push(arr[i]);
所以我們說我們要通for循環的第一次迭代和I = 1 ...我們想找到ARR [1]的指標,這將是數組的第二個值。但是哪一個? indexOf方法是在「unique」上運行,所以我們找到唯一數組的第二個值的索引(目前只有(arr [0])???或者我們找到第二個值的索引作爲參數傳入的數組?
在第一次運行時,通過for循環在唯一數組中沒有第二個元素/值(因爲只有1個值),所以我們將推送該元素/添加該元素以獨特的陣列。
基本上,我很困惑,什麼樣的代碼的上半部分實際上做。任何幫助,將不勝感激。
如果你想使用一個例子,我想,假設數組[7,7,12,98,106]作爲a傳遞參數...
預先感謝...
謝謝你進去。我想我應該得到-1這個問題 - 也許這是一個愚蠢的問題? hahah – Seeeyonnn
在if語句中有什麼我可以代替indexO的地方嗎?例如, if(arr [i]!= __________) 有什麼辦法可以說是否(數組元素)不等於(已存在於唯一數組中的任何元素)? – Seeeyonnn
還有其他的東西可以替代,但indexOf將是最簡單的。如果你想包含另一個JavaScript庫,underscore.js有一個包含函數。是否有你想避免indexOf的原因? – damienc88