Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript对象的属性无法识别它_Javascript_Arrays_Function_Object_Properties - Fatal编程技术网

JavaScript对象的属性无法识别它

JavaScript对象的属性无法识别它,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==

我的程序非常简单——它应该将电影保存在数组中,然后以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;im.director!=null&&m.name!=null&&m.date!=null?console.logJSON.stringifym:null; } 电影导演[ “快而疯狂的电影”, “电影教父”, “由弗朗西斯·福特·科波拉执导的教父”, “教父onDate 29.07.2018”, “2018年7月30日快速狂暴”,
“由罗布·科恩执导的《快速与愤怒》” 问题在于您在内部包含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;im.director!=null&&m.name!=null&&m.date!=null?console.logJSON.stringifym:null; } 电影导演[ “快而疯狂的电影”, “电影教父”, “由弗朗西斯·福特·科波拉执导的教父”, “教父onDate 29.07.2018”, “2018年7月30日快速狂暴”,
“由罗布·科恩执导的《快速与愤怒》” 问题在于您在内部包含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;im.director!=null&&m.name!=空(&m.date)=无效的console.logJSON.stringifym:null; } 电影导演[ “快而疯狂的电影”, “电影教父”, “由弗朗西斯·福特·科波拉执导的教父”, “教父onDate 29.07.2018”, “2018年7月30日快速狂暴”,
“由罗布·科恩执导的《快速与愤怒》” 由于您的问题主要与字符串解析有关,因此可以使用以下正则表达式来解决:

常量输入=[ “快而疯狂的电影”, “电影教父”, “由弗朗西斯·福特·科波拉执导的教父”, “教父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; }
我不明白如何允许电影名称有空格。考虑改变输入数组的格式吗?我的大学有家庭作业检查系统,有这样的测试,这就是我不能改变输入的原因。我不知道如何允许电影名有空格。考虑改变输入数组的格式吗?我的大学有家庭作业检查系统,有这样的测试,这就是我不能改变输入的原因。谢谢你的充分解释!谢谢你的充分解释!