我目前正在尝试对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不是函数"。在我看来,我或者错误地编写了推送和移位功能的代码,或者这些功能可能不是完成此挑战所必需的。所以,话虽如此,我向大家提出的问题是,我是否错误地在代码中写了一些内容,是否应该从代码中删除某些内容,或者我是否遗漏了其他内容?
如果您想了解更多信息,请与我们联系,以便更好地了解我的问题。
答案 0 :(得分:2)
作为一名同样受到Free Code Camp影响的人,我同意上述评论者的观点,即您在课程中可以学到的最重要的事情是如何研究以及如何提问。所以,我不打算为你提供一个工作片段。不过,我会在你的代码中指出一些具体的问题,这应该指出你正确的方向。
您的代码中存在一些语法问题,以及对如何处理realloc()
和push
的误解。
首先,语法。
shift
此行将var nextInLine = ([], 1);
的值分配给([], 1)
。 nextInLine
不是我所知道的任何javascript数据结构。如您对问题的评论中所述,它只返回([], 1)
。
由于1
和push
是shift
对象上的方法,Array
应为nextInLine
,请留下:
Array
接下来,考虑来自MDN的var nextInLine = []
方法的return
值:
[返回值]是从数组中删除的元素;如果数组为空,则为undefined。
因此,您应该返回的是您致电shift
时返回的值。
最后,shift()
要求您将push()
所需的值加到push
上,而您当前未提供此值。
答案 1 :(得分:1)
所以我发现了一些问题:
([], 1)
是一个表达式,其逗号运算符在[]
和1
上运行,逗号运算符依次计算每个操作数,并返回最后一个操作数。因此,这基本上等同于var nextInLine = 1
而无需进一步处理。.push()
会将undefined
推入数组,这不是你想要的。var nextInLine
,您可以防止自己使用递归和其他一些东西,这通常是一件好事,可以避免。你的一般逻辑应该看起来像这样:
给出参数arr(数组)和el(要添加的元素)
如果arr为空,请向其添加el(arr.push(el)
)并返回el
否则,
从数组中删除第一个元素(使用shift),并将值存储在某处 然后将el添加到数组中 返回您从数组中存储的值
这应该实现所有目标。