2017-01-09 15 views
1

В настоящее время я пытаюсь выполнить JavaScript на FreeCodeCamp. Я работаю над этим вызовом в течение нескольких дней, и я в тупике. Я попросил о помощи на форуме сайта, но ответ, который я получил, был не очень полезным или полезным.Создание структуры данных в JavaScript

Для этой конкретной задачи я должен «написать функцию nextInLine, которая принимает в качестве аргумента массив (arr) и число (элемент). Добавьте число до конца массива, а затем удалите первый элемент массива. Затем функция 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

я успешно выполнил первое требование, но застрял с выяснением, как завершить последние три. Поскольку меня просят «добавить» и «удалить» элементы из массива, я решил, что для успешной реализации этого упражнения необходимы функции push и shift.

Но когда я проверил свой код, у меня появилось сообщение TypeError, которое гласит: «nextInLine.push не является функцией». Мне кажется, что либо я неправильно написал код для функций push и shift, либо эти функции могут не понадобиться для выполнения этой задачи. Итак, если сказать, что мой вопрос для всех вас заключается в том, что я неправильно написал что-то в своем коде, должен ли я удалить что-то из своего кода, или я пропустил что-то еще?

Пожалуйста, дайте мне знать, если есть какая-либо дополнительная информация, которую вы хотели бы знать, чтобы лучше понять мою проблему.

+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.push(el)) и вернуть el
еще,
удалите первый элемент из массива (со сдвигом) и сохраните значение где-нибудь.
затем добавить эл в массив
возвращает значение вы сохраненную из массива

Это должно выполнить все цели.

2

Как кто-то, кто также владел лайком Free Code Camp, я согласен с комментарием выше, что самое важное, что вы можете узнать на курсе, - это как исследовать и как задавать вопросы. Итак, я не собираюсь предоставлять вам рабочий фрагмент. Однако я укажу некоторые специфические проблемы в вашем коде, и это должно указывать на вас в правильном направлении.

У вас есть некоторые проблемы с синтаксисом в коде, а также непонимание того, как обращаться с push и shift.

Во-первых, синтаксис.

var nextInLine = ([], 1); 

Эта строка присваивает значение ([], 1) к nextInLine. ([], 1) - это не любая структура данных javascript, о которой я знаю. Как отмечено в комментарии к вашему вопросу, он просто возвращает 1.

С push и shift методы на Array объекта, nextInLine должен быть Array, оставив нас с:

var nextInLine = [] 

Далее рассмотрим значение метода shiftreturn из MDN:

[Возвращаемое значение] - удаленный элемент из массива; undefined, если массив пуст.

Так что вы должны возвращать, это значение, возвращаемое вашим звонком по номеру shift().

И наконец, push() требует, чтобы вы указали значение push на array, которое вы в настоящее время не предоставляете.