2017-01-09 56 views
1

我目前正在嘗試FreeCodeCamp上的JavaScript挑戰。我幾天來一直在努力研究這個挑戰,並且陷入了困境。我在網站的論壇上尋求幫助,但我得到的迴應並不是很有幫助或有用。在JavaScript中創建數據結構

對於這個特殊的挑戰,我必須「寫一個函數nextInLine,它將一個數組(arr)和一個數字(item)作爲參數。將數字添加到數組的末尾,然後移除數組的第一個元素。 nextInLine函數應該返回被刪除的元素。「

下面是代碼我迄今爲止:

function nextInLine(arr, item) { 
    // Your code here 
    var nextInLine = ([], 1); 
    /*var addToNextInLine = nextInLine.push(); 
    var removedFromNextInLine = nextInLine.shift();*/ 
    return nextInLine; 
} 

// Test Setup 
var testArr = [1,2,3,4,5]; 

// Display Code 
console.log("Before: " + JSON.stringify(testArr)); 
console.log(nextInLine([], 1)); // Modify this line to test 
console.log("After: " + JSON.stringify(testArr)); 

下面是我必須爲了滿足成功地完成這一挑戰的條件:

  • nextInLine([],1)應返回1

  • nextInLine([2],1)應該返回2

  • nextInLine([5,6,7,8,9],1)應該返回5

  • 後nextInLine(testArr,10),testArr [4]應該是10

我已成功完成第一個要求,但我堅持要搞清楚如何完成最後三個。因爲我被要求從數組中「添加」和「移除」元素,所以我認爲推送和移位功能對於成功完成此練習是必需的。

但是,當我測試我的代碼,我得到一個TypeError消息,讀取「nextInLine.push不是一個函數」。在我看來,要麼我錯誤地編寫了推送和移位功能的代碼,要麼這些功能可能不是完成這個挑戰所必需的。所以,這就是說,我所有人的問題都是我錯誤地在代碼中寫了一些東西,我應該從代碼中刪除一些東西,還是錯過了其他東西?

請讓我知道是否有任何額外的信息,你想知道爲了更好地瞭解我的問題。

+4

'var nextInLine =([],1);'由於[逗號運算符]將'nextInLine'設置爲'1'(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator),它同時遮蔽了函數'nextInLine'。 – Xufox

+0

比實際練習更重要的是,FCC實際上教會你正確地搜索和詢問,這是(在我眼中)比知道如何獨立編碼更重要的技能。 +1 –

+0

你的函數不使用它的參數。它只是返回一個硬編碼的值。 – Barmar

回答

1

所以我察覺了幾個問題:

  • ([], 1)是與[]1操作逗號運算符的表達式中,逗號運算依次每個操作數,並返回最後一個。所以這基本上等同於var nextInLine = 1而不需要任何進一步的處理。
  • .push()沒有參數會將undefined推入數組,這不是你想要的。
  • 通過在函數的內部定義var nextInLine的方法,可以避免使用遞歸和其他一些事情,通常避免使用它是件好事。

你一般的邏輯應該看起來有點像這樣:

定參數ARR(陣列)和EL(要添加的元素)
如果改編爲空,薩爾瓦多添加到它(arr.push(el))並返回el
else,
從數組中移除第一個元素(帶shift),並將值存儲在某處。
然後加入EL的陣列
返回你從數組

這應該完成所有目標存儲的值。

2

作爲一個也在Free Code Camp上受潮的人,我同意上面的評論者的意見,你可以在課程中學到的最重要的事情是如何研究以及如何提問。所以,我不打算爲您提供工作片段。不過,我會指出你的代碼中的一些具體問題,這應該指向你正確的方向。

您在代碼中有一些語法問題,以及對如何處理pushshift的誤解。

首先,語法。

var nextInLine = ([], 1); 

此行分配的([], 1)nextInLine的值。 ([], 1)不是我知道的任何javascript數據結構。正如你對問題的評論所指出的,它只是返回1

由於pushshiftArray對象的方法,nextInLine應該是一個Array,留給我們:

var nextInLine = [] 

接下來,考慮shift方法的return值,從MDN

[返回值是]從數組中移除的元素;未定義如果數組爲空。

因此,您應該返回的是您致電shift()時返回的值。

最後,push()要求您希望它的值爲pusharray,您目前沒有提供該值。