1

我和我的朋友在网上玩

我们要求对方说(名字,或动物,或无生命)以一个特定的字母开头

所以我正在考虑建立一个页面来帮助我训练这个游戏

这是一个 php 代码,例如:

function getNamesByChars($chars,$type='name'){
    $names=array(
    'd'=>'Dan',
    'j'=>'John',
    );
    $animals=array(
    'd'=>'Dog',
    'j'=>'Jar',
    );

    $chars=explode(' ',$chars);    
    foreach($chars as $char){
        //if it a name
        if($type=='name')
        $results.=$names[$char];
        //if it animal
        elseif($type=='animal')
        $results.=$animals[$char];
    }
}
    getNamesByChars('j d','animal');
    //results (Jar dog)

这里的问题是我需要让这个页面尽可能快

PHP 需要加载页面

我认为 javascript 是更快的方法

但我是 javascript 的初学者,所以我无法构建这个函数

在javascript中构建这个函数有什么帮助吗?

4

3 回答 3

2

在这里,但如果你真的想了解 javascript,你应该阅读 tuto....

function getNamesByChars(chars,type){
   type = type || 'name';
   var things = { name: {'d': 'dan', 'j': 'john'},
                  animal:  {'d': 'dog', 'j': 'jar'}};
   var results = [];
   var charsarr = chars.split(' ');
   for (var i in charsarr) {
      results.push(things[type][charsarr[i]]);  
   }
   return results;
}

理想情况下,应该检查一个密钥是否不存在,但只有你会使用它......

于 2013-03-04T12:01:06.290 回答
1

我在这个问题上完全矫枉过正:) 有趣的问题,希望它能教给你一些东西。

参见 JSFiddle

HTML

<div>
    <label for="chars">Chars:</label>
    <input id="chars" type="text" />
</div>
<div>
    <input id="names" type="radio" name="names-radio" checked />
    <label for="names">Names</label>
    <input id="animals" type="radio" name="names-radio" />
    <label for="animals">Animals</label>
</div>
<button id="get-names">Get values!</button>

<div>
    <span>Result</span>
    <div id="result"></div>
</div>

JavaScript

document.getElementById('get-names').onclick = getNamesClick;

function getNamesClick() {
    var chars = document.getElementById('chars').value;
    var names = document.getElementById('names').checked ? 'names' : 
        document.getElementById('animals').checked ? 'animals' : ''
    var result = getNamesByChars(chars, names);
    alert(result);
    console.log(document.getElementById('result'));
    document.getElementById('result').innerHTML = result;
}

function getNamesByChars(chars, names) {
    var result = '';
    charsArray = chars.split(' ');
    for (var i = 0; i < charsArray.length; i++) {
        var values = data[names][charsArray[i]];
        for (var j = 0; j < values.length; j++) {
            if (result != '')
                result += ' ';
            result += values[j];
        }
    }
    return result;
}

var data = {
    'names': {
        'a': [ 'Andrew', 'Allison' ],
        'b': [ 'Bob', 'Barry' ],
        'c': [ 'Cheryl', 'Carol' ],
        'd': [ 'Daniel', 'Danny' ],
        'e': [ 'Eddie', 'Emma' ],
        'f': [ 'Frank', 'Flo' ],
        'g': [ 'Greg', 'Grant' ],
        'h': [ 'Holly' ],
        'i': [ 'Ian' ],
        'j': [ 'John' ],
        'k': [ 'Kaylie' ],
        'l': [ 'Liam' ],
        'm': [ 'Mary' ],
        'n': [ 'Ned' ],
        'o': [ 'Oliver' ],
        'p': [ 'Peter' ],
        'q': [ 'Quentin' ],
        'r': [ 'Ryan' ],
        's': [ 'Sarah' ],
        't': [ 'Tom' ],
        'u': [ 'Ualani' ],
        'v': [ 'Victor' ],
        'w': [ 'Will' ],
        'x': [ 'Xan' ],
        'y': [ 'Yvette' ],
        'z': [ 'Zoe' ]
    },
    'animals': {
        'd': [ 'Dog', 'Dolphin' ],
        'e': [ 'Elephant' ]
    }
}
于 2013-03-04T12:18:06.550 回答
1

这是您在 js 中的 php 函数的覆盖

function getNamesByChars( chars,type ){

   type = type || 'name';

   var names = { 'd':'Dan', 'j':'John' },
       animals = { 'd':'Dog', 'j': 'Jar' };
       results = '';

   var chars = chars.split(' ');

   for( var i=0,len = chars.length; i< len ;i++ ){

       if( type == 'name'){

           results += names[ chars[i]];

       } else if( type == 'animal'){

           results += animals[ chars[i]];       

       }

   }

   return results ;

}

并在控制台中打印结果

console.log( getNamesByChars('j d','animal') );

或提醒

alert( getNamesByChars('j d','name') );
于 2013-03-04T12:00:04.417 回答