Как вернуть номер для каждой буквы в строке, используя JavaScript - PullRequest
3 голосов
/ 18 января 2012

если кто-нибудь может дать мне некоторую идею для начала ... в конце там.

я искал ввод слова как например. «люби» и получи сумму чисел, соответствующих каждой букве

ответ = 54

var a = 1;var b = 2;var c = 3;var d = 4;var e = 5;var f = 6;var g = 7;
var h = 8;var i = 9;var j = 10;var k = 11;var l = 12;var m = 13;
var n = 14;var o = 15;var p = 16;var q = 17;var r = 18;var s = 19;var t = 20;
var u = 21;var v = 22;var w = 23;var x = 24;var y = 25;var z = 26;


var addLetters = new Array(1);
addLetters[1] = "love";
var square01 = 12 + 15 + 22 + 5 ;
function (){
document.getElementById(square01).innerHTML;}}

спасибо всем за помощь.

Ответы [ 7 ]

4 голосов
/ 18 января 2012

Вы можете использовать ascii-код символов в строке, который вообще не требует длинного массива:

function sum(str) {
    var i, sum = 0, a = 'a'.charCodeAt(0) - 1;
    for (i = 0 ; i < str.length ; i++) {
        sum += str.charCodeAt(i) - a;
    }
}

alert(sum('love'));
1 голос
/ 18 января 2012

Вам не нужно создавать массив сопоставления, предполагая, что ваше слово состоит из строчных букв, которые вы можете использовать:

    var word = 'love', total = 0, codeA='a'.charCodeAt();
    for ( var i = 0; i < word.length; i++ ) {
            total += word.charCodeAt( i ) - codeA + 1;
    }

charCodeAt () возвращает значение Unicode символа, для латинского алфавитаравно его ASCII-коду, который является последовательным для букв

1 голос
/ 18 января 2012
  1. Использование закрытия с RegEx

    (function(w){
        var c=0;
        w.toLowerCase().replace(/[a-z]{1}/g,function(a){c+=a.charCodeAt(0)-97+1}); 
        return c;
    })("love")
    
  2. Тривиальное решение.

    var c=0;
    var str="love"
    var istr=str.toLowerCase()
    for(var i=0;i<istr.length;i++){
        c+=istr.charCodeAt(i)-"a".charCodeAt(0)+1
    }
    
1 голос
/ 18 января 2012

Вы хотите настроить свои письма так:

var alphabet = {
    a: 1,
    b: 2,
    c: 3
}

var word = "love";
var total = 0;
for (var i = 0; i < word.length; i++)
    total += alphabet[word[i]];

ДЕМО


EDIT

@am not i am утверждает, что IE8 не будет индексировать подобные строки, и она обычно права, поэтому, чтобы быть дружественным к нежелательным браузерам, вы можете сделать

for (var i = 0; i < word.length; i++)
    total += alphabet[word.charAt(i)];

вместо

for (var i = 0; i < word.length; i++)
    total += alphabet[word[i]];
0 голосов
/ 18 января 2012

На самом деле, не обязательно делать все это.У меня есть простой трюк здесь ...

var word="Love";
var total=0;
for(i=0;i<word.length;i++){
 total+=((word[i].toLowerCase()).charCodeAt(0)-96);     
 }
 alert(total); // aleters 54
0 голосов
/ 18 января 2012

Буквы уже имеют числовые присвоения - значение ASCII.A = 65, поэтому просто вычтите смещение.

var phrase="abcd".toUpperCase();
var sum = 0
for(x=0;x<phrase.length;x++) {
     sum = sum + phrase.charCodeAt(x)-64;
}  
alert(sum)
0 голосов
/ 18 января 2012

Это будет работать для того, что вы хотите (обратите внимание, что первый элемент алфавита пуст, потому что мы хотим a = 1, а не 0)

var alphabet = ['','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
  , word = 'love'
  , letters = word.split('')
  , sum = 0

letters.forEach(function(letter){
  sum += alphabet.indexOf(letter)
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...