1

我在 JS 中有以下数组

 var wordselection = [
{ 'word': "Pomme", "gender": "m", },
{ "word": "Banane", "gender": "f", },
{ "word": "Ananas", "gender": "m", },
{ "word": "Chat", "gender": "f", },
{ "word": "Chien", "gender": "m", },
{ "word": "Poisson", "gender": "f", },

];   

function randomword(){
var chosen = wordselection[Math.floor(Math.random()*wordselection.length)].word
document.getElementById("wordinput").innerHTML=chosen;
}

我目前有 randomword 函数,它从数组中生成一个随机“单词”并将其放在一个 div 中(例如 pomme、chat)

我需要创建另一个函数来检查 div 中的随机词实际是什么,然后计算出数组中该词的性别是“m”还是“f”。

例如,如果随机词生成为“泊松”,我需要一个实现“泊松”的函数,并在数组中查看它是性别“f”

如何做到这一点?

4

5 回答 5

2

这是一个简单的 JS 解决方案,可以满足您的需求:

HTML

<div id="test">Chat</div>

JavaScript:

var wordselection = [
{ 'word': "Pomme", "gender": "m" },
{ "word": "Banane", "gender": "f"},
{ "word": "Ananas", "gender": "m" },
{ "word": "Chat", "gender": "f" },
{ "word": "Chien", "gender": "m" },
{ "word": "Poisson", "gender": "f" }

];   

var word = document.getElementById('test').innerHTML;

var item = wordselection.filter(function(el){
  return el.word == word
})[0];

console.log(item && item.gender);

如果 div 中的单词不在列表中,它会记录 undefined。

演示:http: //jsbin.com/AlOtINE/1/edit

编辑:如果您需要检查许多这样的词,您可以通过将它们存储在地图中(也称为 JavaScript 中的对象)来获得更好的性能:

var wordselection = {
  'Pomme' : 'm',
  'Banane' : 'f',
  'Ananas' : 'm',
  'Chat' : 'f',
  'Chien' : 'm',
  'Poisson' : 'f'
}

那么过滤部分就很简单了:

console.log(wordselection[word]); // gender or undefined

如果您从外部来源获得 wordselection 但仍想将其转换为上述格式,则可以使用以下代码段:

var optimizedwordselection;
for (var i=0; i<wordselection.length; i++) {
  optimizedwordselection[wordselection.word] = wordselection.gender;
}
于 2013-10-09T08:45:14.817 回答
0

我不知道您的完整代码结构或实际实现。但是,我会以两种方式中的任何一种方式进行。可能有许多其他方法可以实现解决方案。

  1. 在变量中使用http://api.jquery.com/html/复制 DIV 元素的 HTML 。HTML 将存储为字符串。在字符串中搜索并查看“单词”是否存在。如果有或没有,请采取适当的措施。

  2. 创建一个临时数组。将键值对存储在该数组中。例如{“泊松”,“F”}。稍后当您想查找“单词”是否存在时,只需在数组中搜索它们的键是否存在。如果 KEY 存在,那么您可以随时检查其值,即性别。

var holder = new Array();

function randomword(){
    var chosen = wordselection[Math.floor(Math.random()*wordselection.length)].word

    if( checkPost(chosen) ){
        document.getElementById("wordinput").innerHTML=chosen;
        holder['chosen'] = gender_variable;
    }
}

function checkPost(word){
    if( holder[word] === undefined ) {
        return null;
    }
    return holder[word];
}
于 2013-10-09T08:40:40.477 回答
0

您可以使用任何其他库吗?如果我是你,我会使用 lo dash,它可以为你处理这种事情,而无需你自己迭代集合。例如,您需要做的就是:

var wordselection = [
    { 'word': "Pomme", "gender": "m", },
    { "word": "Banane", "gender": "f", },
    { "word": "Ananas", "gender": "m", },
    { "word": "Chat", "gender": "f", },
    { "word": "Chien", "gender": "m", },
    { "word": "Poisson", "gender": "f", },
];

var gender = _.find(wordSelection, { 'word': "Banane" }).gender;
于 2013-10-09T08:48:40.473 回答
0

这是您想要使用 JQuery 的内容:

JavaScript 代码:

 var wordselection = [
{ 'word': "Pomme", "gender": "m", },
{ "word": "Banane", "gender": "f", },
{ "word": "Ananas", "gender": "m", },
{ "word": "Chat", "gender": "f", },
{ "word": "Chien", "gender": "m", },
{ "word": "Poisson", "gender": "f", },

];  


     $.each( wordselection, function(key, value) {

         if ( value.word == $('#result').html() )
         {
             alert(value.gender);
         }
     })

http://jsfiddle.net/GWUxc/

或使用您的随机函数:

 var wordselection = [
{ 'word': "Pomme", "gender": "m", },
{ "word": "Banane", "gender": "f", },
{ "word": "Ananas", "gender": "m", },
{ "word": "Chat", "gender": "f", },
{ "word": "Chien", "gender": "m", },
{ "word": "Poisson", "gender": "f", },

];  

function randomword(){
    var chosen = wordselection[Math.floor(Math.random()*wordselection.length)].word
document.getElementById("wordinput").innerHTML=chosen;
}

     randomword()
     $.each( wordselection, function(key, value) {

         if ( value.word == $('#wordinput').html() )
         {
             alert(value.gender);
         }
     })

http://jsfiddle.net/GWUxc/1/

无论如何,我更喜欢使用filter方法的解决方案:数组是否包含?

于 2013-10-09T08:43:03.477 回答
0

您可以遍历您的 JSON 对象数组:

var wordselection = [
  { 'word': "Pomme", "gender": "m", },
  { "word": "Banane", "gender": "f", },
  { "word": "Ananas", "gender": "m", },
  { "word": "Chat", "gender": "f", },
  { "word": "Chien", "gender": "m", },
  { "word": "Poisson", "gender": "f", },
]; 

var selectedWord = "Chien";
var selectedWordGender;
for(var i = 0; i < wordselection.length; i++) {
  if(wordselection[i].word === selectedWord)
  {
      selectedWordGender = wordselection[i].gender;
  }
}     

console.log(selectedWordGender);
于 2013-10-09T08:49:36.290 回答