8

JavaScript を使用して、Web ページから名前を取り出し、何らかの方法でそれらをつなぎ合わせています (おそらく配列を使用します)。すべての名前を集めたら、名前のすべての電子メール アドレスを示す別の文字列を作成する必要があります。電子メール アドレスは Web ページにないため、何らかの形でスクリプトに可能なすべての thisName=thisEmail をリストする必要があります。私は無数のifステートメントを作成してこれに近づこうとしていましたが、もっと効率的な方法が必要だと思いました. 助言がありますか?

var x = getElementById("names");
var name = x.InnerHTML;
var email;
if (name == 'Steve'){ email == 'steve462@gmail.com'; }
if (name == 'Bob'){ email == 'duckhunter89@gmail.com'; }
....
4

3 に答える 3

15

あなたのコードはif-elsesのみであるため、switchステートメント:-)

いいえ、正直に。最善の方法は、任意の名前から電子メール アドレスを作成する単純なアルゴリズムを見つけることです。

function mail(name) {
    return name.toLowerCase() + "@gmail.com";
}
var email = mail("Bob") // example usage

それらが大きく異なる場合は、オブジェクトをキー値マップとして使用できます。

var mails = {
    "Steve": "steve@gmail.com",
    "Bob": "bob1@freemail.org",
    ...
}
var email = mails[name];

使用する必要があるアルゴリズムを決定する必要がある場合は、それらを組み合わせることもできます。

var map = [{
    algorithm: function(name) { return name+"@something"; },
    names: ["Steve", "Bob", ...]
},{
    algorithm: function(name) { return "info@"+name+".org"; },
    names: ["Mark", ...]
}];
for (var i=0; i<map.length; i++)
    if (map[i].names.indexOf(name) > -1) {
        var email = map[i].algorithm(name);
        break;
    }

またはそれが少し簡単な場合:

var domains = {
    "gmail.com": ["Steve", "Bob", ...],
    "free.xxx": ["Mark", ...],
    ...
};
for (var domain in domains)
    if (domains[domain].indexOf(name) > -1)
        var email = name.toLowerCase()+"@"+domain;
        break;
    }

クライアントに配信するデータの量をできる限り減らすようにしてください。

于 2012-04-05T13:01:27.333 に答える
1

次のような連想配列にすべてのメールアドレスを保存できます

疑似コード

var emailsList = ["steve" => "steve@gmail.com", "bob" => "bob@gmail.com"];
then email = emailsList[name]; will solve your problem
于 2012-04-05T13:04:03.700 に答える
1

事前にオブジェクトを作成できます。

var name_email_map = {
 "Steve": "steve@gmail.com",
 "Bob": "bob@gmail.com",
 "John": "j7hogli123123@telus.net"
}

これは、使用している言語に関係なく、JSON ライブラリを使用してサーバー側の言語から簡単に出力できます。このページの下部に JSON ライブラリのリストがあります: http://www.json.org/

サーバー側で PHP を使用している場合は、データベースから選択した連想配列を json_encode するだけです。

var name = 'Bob'; //x.innerHTML;
var email = name_email_map[name];
alert(email); // Alerts bob@gmail.com
alert(name_email_map['John']); // Alerts j7hogli123123@telus.net
于 2012-04-05T13:04:07.307 に答える