2014-07-12 4 views
-4

Я написал этот код. Кажется, он работает корректно через первый набор вложенных циклов. Когда я помещаю отладчик выше финального цикла, он вернет мне правильную вещь (и если я хочу вернуть newArray, он вернется). Что я делаю не так?Множество циклов, множество вопросов

Я хочу, чтобы он пропустил массив letterSplit, который я сделал из ввода, затем прокрутите массив значений и найдите соответствующее значение и нажмите соответствующее значение в newArray. Это работает с 1 буквой.

НО Я также хочу, чтобы он работал для нескольких букв, так что, если кто-то помещает в «кошку», он добавит их все в новый массив «total». Это то, что я пытался сделать с последним циклом цикла. Предложения? Идеи? Вы видите какое-то неуместное слово или символ?

var scrabble = function (letter) { 
var newLetter = letter.toLowerCase(); 
var letterSplit = newLetter.split(" "); 
var newArray = []; 
var stupidArray = []; 
var total = 0; 
var values = [["a", 1], ["b", 3], ["c", 3], ["d", 2], ["e", 1], ["f", 4], ["g", 2], ["h", 4], ["i", 1], ["j", 8], ["k", 5], ["l", 1], ["m", 3], ["n", 1], ["o", 1], 
       ["p", 3], ["q", 10], ["r", 1], ["s", 1], ["t", 1], ["u", 1], ["v", 4], ["w", 4], ["x", 8], ["y", 4], ["z", 10]]; 

    for (var i=0; i < letterSplit.length; i++) { 
     for (var i=0; i < values.length; i++) { 
      if (values[i][0] === letterSplit[0]) { 
      newArray.push(values[i][1]); 
      stupidArray += letterSplit.splice(0,1); 
      } 
     } 
    } 
    for (var i=0; i < newArray.length; i++) { 
     total += i; 
    } 

var result = total.toString(); 
return total; 
}; 
+0

FWIW: 'х + = y' -> х * не * массив после – user2864740

+0

Вы распределяете строку на пространствах:' newLetter.split (»«); ', таким образом, она будет разделена up 'a cat' в' ['a', 'cat'] ', но не в буквы. Вы должны просто выполнить 'newLetter.split ('')'. – christian314159

+0

Что именно должен делать этот код? Найти оценку для данного слова или что-то еще? –

ответ

1

Ваш код исправлен

Javascript

var scrabble = function (letter) { 
    var letterSplit = letter.toLowerCase().split(''), 
     total = 0, 
     values = [ 
      ['a', 1], 
      ['b', 3], 
      ['c', 3], 
      ['d', 2], 
      ['e', 1], 
      ['f', 4], 
      ['g', 2], 
      ['h', 4], 
      ['i', 1], 
      ['j', 8], 
      ['k', 5], 
      ['l', 1], 
      ['m', 3], 
      ['n', 1], 
      ['o', 1], 
      ['p', 3], 
      ['q', 10], 
      ['r', 1], 
      ['s', 1], 
      ['t', 1], 
      ['u', 1], 
      ['v', 4], 
      ['w', 4], 
      ['x', 8], 
      ['y', 4], 
      ['z', 10] 
     ], 
     i, 
     j; 

    for (i = 0; i < letterSplit.length; i++) { 
     for (j = 0; j < values.length; j++) { 
      if (values[j][0] === letterSplit[i]) { 
       total += values[j][1]; 
       break; 
      } 
     } 
    } 

    return total; 
}; 

console.log(scrabble('cat')); 

На jsFiddle

+0

СПАСИБО! Это было именно то, что я использовал одну и ту же переменную для обоих циклов! Я знал, что это что-то малое, чего я не видел, или чего-то, чего я не знал. Я раньше не вложил петли, поэтому я даже не думал об этом. Спасибо! – Magpie

2

Использование Object в качестве поиска для значения буквы, вероятно, будет проще/более разумным. Что-то вроде этого.

Javascript

var values = { 
    a: 1, 
    b: 3, 
    c: 3, 
    d: 2, 
    e: 1, 
    f: 4, 
    g: 2, 
    h: 4, 
    i: 1, 
    j: 8, 
    k: 5, 
    l: 1, 
    m: 3, 
    n: 1, 
    o: 1, 
    p: 3, 
    q: 10, 
    r: 1, 
    s: 1, 
    t: 1, 
    u: 1, 
    v: 4, 
    w: 4, 
    x: 8, 
    y: 4, 
    z: 10 
}; 

function scrabble(word) { 
    return word.toLowerCase().split('').reduce(function (acc, letter) { 
     if (values.hasOwnProperty(letter)) { 
      acc += values[letter]; 
     } 

     return acc; 
    }, 0); 
} 

console.log(scrabble('cat')); 

Выход

5 

На jsFiddle

+0

Спасибо! Каждый хочет решить это с помощью объекта, но мне нужно решить его с помощью массива. Я действительно думаю, что мой код близок, и меня беспокоит, что должно быть что-то маленькое, чтобы он не работал! – Magpie

+0

Просто просто «уменьшите» 'массив' до' объекта'. – Xotic750

+0

В вашем решении вы используете индексный итератор 'i' в качестве имени переменной для внутренних и внешних циклов' for'. И вы должны «разбить» все символы, а не на пробел. – Xotic750

Смежные вопросы