【问题标题】:Dynamic object value for gender in JavascriptJavascript中性别的动态对象值
【发布时间】:2020-03-17 20:33:59
【问题描述】:

我正在尝试编写从对象加载文本并随机分配性别的东西以一种持续存在的方式

const output = {
  text: "He thought that his sweater would suit him"
}

我希望能够让对象在展示时随机显示“他认为他的毛衣会适合他”或“她认为她的毛衣会适合她”。为了解决这个问题,而不必创建两个不同的对象——一个用于男性,一个用于女性——我已经做到了这一点:

const gender = {
  male: {
    pronoun: "he",
    possPronoun: "his",
    possAdjective: "his",
    object: "him",
    moniker: "sir"
  },
  female: {
    pronoun: "she",
    possPronoun: "hers",
    possAdjective: "her",
    object: "her",
    moniker: "ma'am"
  }
};

function randGender (usage) { // Add lettercase functionality later
  return Math.floor(Math.random()*2) == 1 ? gender.female[usage] : gender.male[usage] 
}

console.log(randGender("pronoun"));

我卡住的地方是之后该怎么办。

const output = {
  text: `${randGender("pronoun")} thought that ${randGender("possAdjective")} sweater would suit ${randGender("object")}`
}

console.log(output.text); //she thought that his sweater would suit her

...当我希望它只保留一种性别时显然不起作用。

我认为有一些解决方法,例如使用 output.text.male 和 output.text.female 并在调用对象时执行随机部分。有什么方法可以按照我的方式进行吗?

感谢您的帮助!

【问题讨论】:

    标签: javascript object dynamic literals


    【解决方案1】:

    您需要为性别而不是某些道具返回整个内部对象,并且基于此您可以检索对象内部的道具:

    function getRandGender() {
      return Math.floor(Math.random() * 2) == 1 ? gender.female : gender.male
    }
    
    const randGender = getRandGender();
    
    const output = {
      text: `${randGender.pronoun} thought that ${randGender.possAdjective} sweater would suit ${randGender.object}`
    }
    

    【讨论】:

      【解决方案2】:

      那是因为您在分配output.text 值时调用了函数 randGender 三个不同的时间,所以它在每次调用时随机生成一个性别。

      最好使用'randomizer'一次将变量定义为对象,然后在分配output.text时调用该对象变量。

      参见下面的 sn-p。

      const gender = {
        male: {
          pronoun: "he",
          possPronoun: "his",
          possAdjective: "his",
          object: "him",
          moniker: "sir"
        },
        female: {
          pronoun: "she",
          possPronoun: "hers",
          possAdjective: "her",
          object: "her",
          moniker: "ma'am"
        }
      };
      
      const randomGender = Math.floor(Math.random() * 2) == 1 ?
        gender.female :
        gender.male;
      
      console.log(`Random Gender:`, randomGender);
      
      const output = {
        text: `${randomGender.pronoun} thought that ${randomGender.possAdjective} sweater would suit ${randomGender.object}`
      }
      
      document.write(JSON.stringify(output));

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-26
        • 2020-05-25
        • 1970-01-01
        • 1970-01-01
        • 2010-10-07
        • 2019-03-20
        相关资源
        最近更新 更多