2015-01-28 1 views
0

Поскольку строки неотменяемы в Javascript, как я могу использовать вход пользователя для конверсий?Как я могу обойти неизменность строки в Javascript?

Я пытался использовать функцию, которая меняет цифры шестнадцатеричного кода цвета на десятичные числа, но застряла с неизменяемым свойством строк. Я попытался скопировать каждый символ в массив, используя «for», но новый массив все еще не работает. Вот пример кода для того, что я пытаюсь сделать:

var user_input = prompt("Please enter an hexadecimal color code:","e.g. A876FF"); 

     var hexa_to_dec = function(hexa_code)/*changes each digit from hexadecimal to decimal*/ 

     { 
     for(i = 0; i < hexa_code.length; i++) 

      { 
      if (isNaN(hexa_code[i])) 

       { 
       switch(hexa_code[i]) 

        { 
        case "A" : hexa_code[i] = 10; break; 
        case "B" : hexa_code[i] = 11; break; 
        case "C" : hexa_code[i] = 12; break; 
        case "D" : hexa_code[i] = 13; break; 
        case "E" : hexa_code[i] = 14; break; 
        case "F" : hexa_code[i] = 15; break; 
        } 

       } 

      } 

     document.write(hexa_code); 
     } 

    hexa_to_dec(user_input); 

ответ

2

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

var user_input = prompt("Please enter an hexadecimal color code:","e.g. A876FF"); 

user_input = user_input.replace(/[ABCDEF]/g, function(x) { 
    return {A:10,B:11,C:12,D:13,E:14,F:15}[x]; 
}); 

document.body.innerHTML = user_input; 

FIDDLE

+0

Великий ответ, @adeneo. – Andy

+0

Замена оператора return с помощью этого 'return x.toUpperCase(). CharCodeAt (0) - 55;' добавит больше неясности. – Amberlamps

+0

@Amberlamps - Мне это нравится, и думаю, что это довольно умно. – adeneo

0

Поскольку hexa_code является строка и неизменна, вы не можете писать обратно к нему, например, когда вы пытаетесь hexa_code [я] = 10 в вашем заявлении выключателя.

Создайте новую переменную, чтобы сохранить результат.

Вот, смотрите рабочий код ниже (также в http://jsfiddle.net/legolandbridge/pn1t4jz1/)

var user_input = prompt("Please enter an hexadecimal color 

    code:","e.g. A876FF"); 

    var hexa_to_dec = function(hexa_code) { 

      var output = ""; 

      for(var i = 0, limit=hexa_code.length; i < limit; i++) { 

        switch(hexa_code[i]){ 
         case "A" : output += 10; break; 
         case "B" : output += 11; break; 
         case "C" : output += 12; break; 
         case "D" : output += 13; break; 
         case "E" : output += 14; break; 
         case "F" : output += 15; break; 
         default: output += hexa_code[i]; 
         } 

        } 

      console.log(output); 
      }; 

    hexa_to_dec(user_input); 
Смежные вопросы