我尝试使用IF添加所有组合,但是要写很多东西。如果我得到了用户标志和另一个用户标志,例如白羊座和白羊座,我会发送输出(“很多”),但是我有12 * 12 = 144个组合!

有什么选择可以缩短时间吗?

    <script>
 function hatama() {
       signYours= $("input[name='sign1']").val()
       signFriend=$("input[name='sign2']").val()


       //Aries
       if (signYours=="Aries" && signFriend=="Gemini")|| (signYours=="Aries" && signFriend=="Leo")|| (signYours=="Aries" && signFriend=="Saggitarious")|| (signYours=="Aries" && signFriend=="Libra")||(signYours=="Aries" && signFriend=="Aquarius")
       $("#output").val("High");
       if (signYours=="Aries" && signFriend=="Aries")||(signYours=="Aries" && signFriend=="Virgo") || (signYours=="Aries" && signFriend=="Capricon") ||
       $("#output").val("Medium");
       if (signYours=="Aries" && signFriend=="Pisces") || (signYours=="Aries" && signFriend=="Cancer")|| (signYours=="Aries" && signFriend=="Scorpio")
       $("#output").val("Low");
       //Taurus
       if (signYours=="Taurus" && signFriend=="Virgo")|| (signYours=="Taurus" && signFriend=="Capricon")||(signYours=="Taurus" && signFriend=="Taurus")||(signYours=="Taurus" && signFriend=="Cancer")||(signYours=="Taurus" && signFriend=="Scorpio")||(signYours=="Taurus" && signFriend=="Pisces")
       $("#output").val("High");
       if (signYours=="Taurus" && signFriend=="Aquarius")||(signYours=="Taurus" && signFriend=="Taurus")
       $("#output").val("Medium");
       if (signYours=="Taurus" && signFriend=="Gemini")|| (signYours=="Taurus" && signFriend=="Leo")||(signYours=="Taurus" && signFriend=="Saggitarious")
       $("#output").val("Low");


</script>

最佳答案

一种选择是使用一个对象,该对象的属性是您的符号,其值是具有HighMediumLow属性的对象,其值是相关的符号:



// Object indexed by your own sign:
const signs = {
  Aries: {
    High: ['Gemini', 'Leo', 'Saggitarious', 'Libra', 'Aquarius'],
    Medium: ['Aries', 'Virgo', 'Capricon'],
    Low: ['Pisces', 'Cancer', 'Scorpio']
  }
  // ...
};
const getAssoc = (signYours, signFriend) => {
  const yourObj = signs[signYours];
  if (!yourObj) {
    return "Your sign is invalid";
  }
  const foundEntry = Object.entries(yourObj)
    .find(([_, arr]) => arr.includes(signFriend));
  if (!foundEntry) {
    return "Friend's sign is invalid";
  }
  return foundEntry[0];
};
console.log(getAssoc('Aries', 'Gemini'));
console.log(getAssoc('Aries', 'Scorpio'));





因此,对于您的代码:

function hatama() {
  const signYours = $("input[name='sign1']").val();
  const signFriend = $("input[name='sign2']").val();
  $("#output").val(getAssoc(signYours, signFriend));
}


(确保始终声明变量,否则将在全局对象上隐式创建属性,应避免使用)

如果需要为每个可能的符号在signs上设置属性,则如果存在高/中/低关联的模式,则可能有一种更有效的方法。

关于javascript - 较短的代码,而不是对所有组合使用IF,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55628487/

10-11 23:25
查看更多