在JavaScript中创建数据结构

时间:2017-01-09 20:52:16

标签: javascript arrays function push shift

我目前正在尝试对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不是函数"。在我看来,我或者错误地编写了推送和移位功能的代码,或者这些功能可能不是完成此挑战所必需的。所以,话虽如此,我向大家提出的问题是,我是否错误地在代码中写了一些内容,是否应该从代码中删除某些内容,或者我是否遗漏了其他内容?

如果您想了解更多信息,请与我们联系,以便更好地了解我的问题。

2 个答案:

答案 0 :(得分:2)

作为一名同样受到Free Code Camp影响的人,我同意上述评论者的观点,即您在课程中可以学到的最重要的事情是如何研究以及如何提问。所以,我不打算为你提供一个工作片段。不过,我会在你的代码中指出一些具体的问题,这应该指出你正确的方向。

您的代码中存在一些语法问题,以及对如何处理realloc()push的误解。

首先,语法。

shift

此行将var nextInLine = ([], 1); 的值分配给([], 1)nextInLine不是我所知道的任何javascript数据结构。如您对问题的评论中所述,它只返回([], 1)

由于1pushshift对象上的方法,Array应为nextInLine,请留下:

Array

接下来,考虑来自MDNvar 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添加到数组中   返回您从数组中存储的值

这应该实现所有目标。