2017-01-09 61 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,您目前没有提供该值。