JavaScript学校练习-即时及;排列

JavaScript学校练习-即时及;排列,javascript,arrays,function,alert,prompt,Javascript,Arrays,Function,Alert,Prompt,我需要解决这个学校作业,但我不知道如何解决。以下是文本: 我需要制作一个程序,通过prompt()对话框从用户那里获取信息。用户需要输入的信息是他的姓名和性别(例如Marc,m)。根据这些信息,程序需要在alert()对话框中从(已给出)列表中写入形容词,这些形容词的开头字母与名称中的字母相同 例如:用户的名字是马克,他的性别是男性。程序需要使用男性列表中的形容词(有两个带形容词的列表,分别适用于男性和女性),并在警报对话框中这样编写: 疯狂的 准确的 推理 计算的 如果你垂直读他们的第一个字母

我需要解决这个学校作业,但我不知道如何解决。以下是文本:

我需要制作一个程序,通过prompt()对话框从用户那里获取信息。用户需要输入的信息是他的姓名和性别(例如Marc,m)。根据这些信息,程序需要在alert()对话框中从(已给出)列表中写入形容词,这些形容词的开头字母与名称中的字母相同

例如:用户的名字是马克,他的性别是男性。程序需要使用男性列表中的形容词(有两个带形容词的列表,分别适用于男性和女性),并在警报对话框中这样编写:

疯狂的

准确的

推理

计算的

如果你垂直读他们的第一个字母,他们会说MARC

我用形容词来表示字母表中的所有字母,包括男性和女性。 请记住,变量名和形容词都在我的母语(塞尔维亚语)中,但这不应该是问题,你会明白的,我会在注释中解释代码

var pridevi={
m:[“阿特拉克提万”、“布列萨夫”、“奇尼坎”、“奇努丹”、“奇奥帕夫”、“杜霍维特”、“丹格里扎夫”、“埃洛克文坦”、“幻想曲”、“格罗赞”、“哈拉普吉夫”、“伊姆契安”、“雅克”、“卡塔斯托法兰”、“勒普”、“柳巴赞”、“穆达尔”、“奈万”、“恩扬贾夫”、“奥托普兰”、“波塞万”、“拉齐格兰”、“斯梅Š安”、“萨尔吉夫”、“托兰坦坦坦坦”、“乌博拉维斯安”、“埃奥”、“扎里努特”、“扎里努特”],
z:[“阿特拉克提夫纳”、“布列萨瓦”、“奇尼奇纳”、“奇努德纳”、“奇奥帕瓦”、“杜霍维塔”、“迪扎瓦”、“阿瓦夫拉斯塔”、“埃洛克文特纳”、“幻想曲纳”、“格罗兹纳”、“哈拉普基瓦”、“伊姆奇纳”、“雅卡”、“卡塔斯托法尔纳”、“莱帕”、“柳巴兹纳”、“穆德拉”、“奈夫纳”、“恩扬贾瓦”、“奥特博纳”、“波塞夫纳”、“拉齐格拉纳”、“斯梅斯姆纳”、“阿尔吉瓦”、“托纳”、“维塞拉”,“zabrinuta”、“žuta”],
}//我将形容词存储在对象中,其中属性m:表示男性,属性f:表示女性形容词
var unos=prompt(“Upišite ime i pol.Npr.Mirko,m”);//提示格式
var ime=unos.toLowerCase().split(“,”).shift();//在这个变量中我存储了名称
var pol=unos.toLowerCase().split(“,”.pop();//在这个变量中我存储了sex
//console.log(输入法+“”+pol)>mirko m
如果(unos==null){
警报(“Korisnik je odustao.”;//如果用户单击“取消”,此消息将显示在警报对话框中
}
否则如果(unos==未定义&&ime<0&&pol<0){
警报(“Nisu uneseni ispravni podaci.”);//如果用户未以正确的形式写入数据,此消息将显示在警报对话框中
}
否则{
var odgovor=pridevi[pol].find(opis=>ime[0]==opis[0]);//这里有一个主要的问题,它不能像它应该的那样工作。它只显示名称第一个字母的形容词,但不能显示所有的形容词
警报(odgovor);

}
这个答案依赖于模式匹配,它相当脆弱,因为如果有人不遵循定义的格式,它将无法正常工作。请注意:

  • 将形容词组移动到保持对象中,因为访问动态属性相当简单,并且需要较少的if/else链接才能到达正确的数组组
  • 定义了一些实用程序箭头函数。如果不熟悉这些函数,可以使用如下标准函数进行尝试:
    • 函数notEmpty(val){
      返回值(val!==未定义和&val!==空和&val.length>0);
      }
  • 用于使用回调重新格式化结果数组
  • 使用数组解构语法,您可以在获得映射结果后定义这些变量来替换它(
    const name=mappedArray[0]
  • 在JS中,在访问字符串索引之前不需要拆分字符串,因此
    'string'[0]
    将为您提供's',这在回调函数中很有用
//形容词组
常量形容词={
f:[“准确”、“健美”、“计算”、“果断”],
m:[“抽象”、“美丽”、“能干”、“令人愉快”],
}
//用于检查值是否存在且不为空的实用程序函数
const notEmpty=val=>(val!==undefined&&val!==null&&val.length>0);
//提示响应持有者(定义格式)
const question=prompt(“写下你的名字和性别(格式:Marc,m.)”;
//函数设置响应中每个条目的格式
///\W/g是用于剥离非字母数字的正则表达式
const formatEntries=val=>val.replace(/\W/g',).toLowerCase();
//使用格式拆分和处理您的响应
常量[名称,形容词组]=问题.拆分(“,”,2)
.map(格式化条目)
//如果两个变量都已设置,则尝试查找匹配的形容词
if(notEmpty(名称)和notEmpty(形容词组)){
常量回答=形容词[形容词组]。查找(adj=>name[0]===adj[0])
控制台日志(应答);

}
经过几天的尝试,我终于解决了这个问题。我不得不说@D Lowther在几行方面帮了我的忙,比如将男性和女性形容词存储在一个对象中而不是两个数组中,并以这种方式从提示符中拆分条目
var[name,形容词组]=question.split(“,”,2)
。这些非常有用

您可以通过单击Run立即检查程序

//在这个对象中,我存储了所有的形容词,包括男性和女性,因为在我的语言中,它们因性别而异
变量pridevi={
在这方面,除了除了除了“这两个州的卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢卢б1079;ббббббб", "њањав", "отпоран", "посесиван", "разигран", "смешан", "шаљив", "толерантан", "уображен", "весео", "забринут", "жут"],
z:[“аааааа”、“аааа”、“чааа”、“ааааааа”和