JavaScript对象的属性无法识别它
我的程序非常简单——它应该将电影保存在数组中,然后以JSON格式打印出来。 我认为问题在于“contains”方法。它适用于一个命名的电影,但当名称包含空格时返回null。这是代码 函数电影导演阵列{ 让电影=[]; 班级电影{ 施工人员姓名、主管、日期{ this.name=名称; this.director=director; this.date=日期; } } let contains=函数movieName{ 让movie=null; movies.forEachm=>m.name==movieName?movie=m:movie=null; 回归电影; } 对于let i=0;iJavaScript对象的属性无法识别它,javascript,arrays,function,object,properties,Javascript,Arrays,Function,Object,Properties,我的程序非常简单——它应该将电影保存在数组中,然后以JSON格式打印出来。 我认为问题在于“contains”方法。它适用于一个命名的电影,但当名称包含空格时返回null。这是代码 函数电影导演阵列{ 让电影=[]; 班级电影{ 施工人员姓名、主管、日期{ this.name=名称; this.director=director; this.date=日期; } } let contains=函数movieName{ 让movie=null; movies.forEachm=>m.name==
“由罗布·科恩执导的《快速与愤怒》” 问题在于您在内部包含forEach的方式 你有:
movies.forEach(m => m.name === movieName ? movie = m : movie = null);
您的电影阵列中填充了快速狂暴第一和教父第二。在forEach的第一次迭代中,它将快速而激烈地测试,并看到它等于movieName,因此movie=m您的代码将使用正确的对象设置movie。在第二次迭代中,它将使用GodFather运行相同的测试,并看到它与movieName不同,因此movie=null您的代码将清除movie,这是错误的。相反,当m.name==movieName为false时,使代码不执行任何操作。因此:
movies.forEach(m => m.name === movieName ? movie = m : null);
以下是完整的工作片段:
函数电影导演阵列{
让电影=[];
班级电影{
施工人员姓名、主管、日期{
this.name=名称;
this.director=director;
this.date=日期;
}
}
let contains=函数movieName{
让movie=null;
movies.forEachm=>m.name==movieName?movie=m:null;//问题就在这里
回归电影;
}
对于let i=0;i“由罗布·科恩执导的《快速与愤怒》” 问题在于您在内部包含forEach的方式 你有:
movies.forEach(m => m.name === movieName ? movie = m : movie = null);
您的电影阵列中填充了快速狂暴第一和教父第二。在forEach的第一次迭代中,它将快速而激烈地测试,并看到它等于movieName,因此movie=m您的代码将使用正确的对象设置movie。在第二次迭代中,它将使用GodFather运行相同的测试,并看到它与movieName不同,因此movie=null您的代码将清除movie,这是错误的。相反,当m.name==movieName为false时,使代码不执行任何操作。因此:
movies.forEach(m => m.name === movieName ? movie = m : null);
以下是完整的工作片段:
函数电影导演阵列{
让电影=[];
班级电影{
施工人员姓名、主管、日期{
this.name=名称;
this.director=director;
this.date=日期;
}
}
let contains=函数movieName{
让movie=null;
movies.forEachm=>m.name==movieName?movie=m:null;//问题就在这里
回归电影;
}
对于let i=0;i“由罗布·科恩执导的《快速与愤怒》” 由于您的问题主要与字符串解析有关,因此可以使用以下正则表达式来解决: 常量输入=[ “快而疯狂的电影”, “电影教父”, “由弗朗西斯·福特·科波拉执导的教父”, “教父onDate 29.07.2018”, “2018年7月30日快速狂暴”, “由罗布·科恩执导的快速狂暴” ]; const output=input.reduceac,cur=>{ const parseAddMovie=/^addMovie\s.+/.execcur; 如果你想看电影{ const[,name]=parseAddMovie; acc.push{name}; 返回acc; } const parseDirectedBy=/.+\s directedby\s.+/.execcur; 如果由{ const[,name,director]=parseDirectedBy; const found=acc.findx=>x.name==name; 已找到和已找到。director=director; 返回acc; } const parseOnDate=/.+\sonDate\s.+/.execcur; 如果parseOnDate{ const[,name,date]=parseOnDate; const found=acc.findx=>x.name==name; 已找到和已找到。日期=日期; 返回acc; } }, [];
console.logoutput 由于您的问题主要与字符串解析有关,因此可以使用以下正则表达式来解决: 常量输入=[ “快而疯狂的电影”, “电影教父”, “由弗朗西斯·福特·科波拉执导的教父”, “教父onDate 29.07.2018”, “2018年7月30日快速狂暴”, “由罗布·科恩执导的快速狂暴” ]; const output=input.reduceac,cur=>{ const parseAddMovie=/^addMovie\s.+/.execcur; 如果你想看电影{ const[,name]=parseAddMovie; acc.push{name}; 返回acc; } const parseDirectedBy=/.+\s directedby\s.+/.execcur; 如果由{ const[,name,director]=parseDirectedBy; const found=acc.findx=>x.name==name; 已找到和已找到。director=director; 返回acc; } const parseOnDate=/.+\sonDate\s.+/.execcur; 如果parseOnDate{ const[,name,date]=parseOnDate; const found=acc.findx=>x.name==name; 已找到和已找到。日期=日期; 返回acc; } }, []; console.logoutput 当找到具有给定名称的电影时,函数contains将停止并返回 它将在以下方面发挥作用: let contains=函数movieName{ return movies.findm=>m.name==movieName; } 当找到具有给定名称的电影时,函数contains将停止并返回 它将在以下方面发挥作用: let contains=函数movieName{ return movies.findm=>m.name==movieName; }
我不明白如何允许电影名称有空格。考虑改变输入数组的格式吗?我的大学有家庭作业检查系统,有这样的测试,这就是我不能改变输入的原因。我不知道如何允许电影名有空格。考虑改变输入数组的格式吗?我的大学有家庭作业检查系统,有这样的测试,这就是我不能改变输入的原因。谢谢你的充分解释!谢谢你的充分解释!