我目前正在FreeCodeCamp上尝试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不是函数”。在我看来,要么我为push和shift函数编写的代码不正确,要么对于完成此挑战可能不是必需的。所以,话虽这么说,我对所有人的问题是我是否在代码中编写了错误的代码,应该从代码中删除某些内容,还是缺少其他内容?
如果您想了解其他信息,以便更好地了解我的问题,请告诉我。
最佳答案
作为同时也参加了Free Code Camp的人,我同意上面的评论者的观点,即在该课程中您可以学习的最重要的内容是如何研究和如何提出问题。因此,我不会为您提供有效的代码段。不过,我会指出您的代码中的一些特定问题,这应该为您指明正确的方向。
您的代码中有一些语法问题,以及对如何处理push
和shift
的误解。
首先,语法。
var nextInLine = ([], 1);
该行将
([], 1)
的值分配给nextInLine
。 ([], 1)
不是我所知道的任何javascript数据结构。如您对问题的评论中所述,它仅返回1
。由于
push
和shift
是Array
对象上的方法,因此nextInLine
应该是Array
,使我们拥有:var nextInLine = []
接下来,从MDN考虑
return
方法的shift
值:[返回值是]从数组中删除的元素;如果数组为空,则为undefined。
因此,您应该返回的是调用
shift()
返回的值。最后,
push()
要求您将其值push
添加到当前未提供的array
上。