2015-05-18 2 views
0

Итак, я пытаюсь найти хороший вызов ole 'FizzBuzz' в JS. Тем не менее, я пытаюсь добавить к нему, поскольку я смог выполнить первый вызов. Для тех, кто не знаком с задачей «FizzBuzz». Сначала вы хотите напечатать цифры 1..100, а те, которые делятся на 3, печатает слово Fizz вместо 3; Те, которые делятся на 5 =>Buzz; и те, которые делятся на оба =>FizzBuzz. Я пытаюсь создать функцию, которая принимает массив, и возвращает массив с соответствующими строками. Например:Javascript 'SUPER' fizzbuzz

function super_fizzbuzz(array){ 
    var super_array = []; 

    for (var array=1; array<=array.length; array++) 
    { 
     if (array % 15 == 0) 
      super_array.push("FizzBuzz"); 
     else if (array % 5 == 0) 
      super_array.push("Buzz"); 
     else if (array % 3 == 0) 
      super_array.push("Fizz"); 
     else 
      super_array.push(array); 
    } 
    return super_array; 
    } 

    console.log(super_fizzbuzz([3,10,15,19])); 

Так в идеале, ответ должен вернуться ["Fizz", "Buzz", "FizzBuzz", 19], однако она просто возвращается пустой массив. Я только что сделал это в Ruby, и я смог заставить его работать без проблем. Попытка перевести мои рубиновые навыки в практику JS и немного узнать о нем. Любые предложения будут ценны.

ответ

2

Здесь:

for (var array = 1; array <= array.length; array++) 

вы перезаписать значение вашего параметра функции, называемой «массив», назначая 1 к нему. Не существует свойства .length числа, поэтому цикл никогда не выполняет одну итерацию.

Если вы хотите перебрать значения в массиве, вы проходите в, а затем использовать переменный индекс (один с различным именем из параметра массива), а затем использовать его для доступа к элементам:

for (var i = 0; i < array.length; i++) { 
     if (array[i] % 15 == 0) 
      super_array.push("FizzBuzz"); 
     // etc 
+0

U напечатает undefined, ту же ошибку, что и я –

+0

@Pointy Отличное объяснение. Я понимаю это намного лучше. Я ДЕЙСТВИТЕЛЬНО новичок в JS, поэтому это помогает. – Nappstir

0

Держи

function super_fizzbuzz(array){ 
      var super_array = []; 

      for (var i=0; i<=array.length-1; i++) 
      { 
       if (array[i] % 15 == 0) 
        super_array.push("FizzBuzz"); 
       else if (array[i] % 5 == 0) 
        super_array.push("Buzz"); 
       else if (array[i] % 3 == 0) 
        super_array.push("Fizz"); 
       else 
        super_array.push(array[i]); 
      } 
      return super_array; 
      } 

      console.log(super_fizzbuzz([3,10,15,19])); 
+1

Дополнительный 'undefined' в результате; '<=' должно быть '<'. – Amadan

+0

@Amadan oops позаботился об этом –

3

Ваш array пытается быть как массив и его индекс. После array = 1, то array.length является undefined и 1 <= undefined является false; петля заканчивается прежде, чем она даже начнется. super_array остается на своем стартовом значении [].

Переименуйте переменную цикла. Кроме того, массивы начинаются с 0, а не 1, и заканчиваются на < array.length, а не на <=.

+2

Также измените 'super_array.push (массив);' на 'super_array.push (array [<< ваша индексная переменная >>]);' – CodeMonkey