我在edabit上遇到了一些挑战,我的输出遇到了问题。所以我必须创建一个接受数组(老虎机结果)的函数,如果数组中的所有元素都相同,则返回true,否则返回false。该数组将包含4个元素。有人可以解释为什么我的代码无法正常工作。
我尝试了其他输入,但效果很好。
'use strict';
function array_Validator(e1,e2,e3,e4)
{
let m_Array=[e1,e2,e3,e4];
for(let i=0;i<m_Array.length-1;i++)
{
for(let x=i;x<m_Array.length-1;x++)
{
if(m_Array[i]!==m_Array[x+1])
{
return false;
}
else
return true;
}
}
}
let u_Result=array_Validator("SS","SS","Ss","Ss");
console.log(u_Result);
因此,当我输入Ss时,它会显示true而不是false。
答案 0 :(得分:2)
您需要将return true
移动到函数的末尾,并且可以使用单个循环并相互检查第一个元素。
'use strict';
function array_Validator(e1, e2, e3, e4) {
let m_Array = [e1, e2, e3, e4];
for (let i = 1; i < m_Array.length; i++) {
if (m_Array[0] !== m_Array[i]) return false;
}
return true;
}
let u_Result = array_Validator("SS", "SS", "SS", "Ss");
console.log(u_Result);
答案 1 :(得分:0)
为此,您可以使用Rest参数... args
function array_Validator(...args) {
for (let i = 1; i < args.length; i++) {
if (args[0] !== args[i]) return false;
}
return true;
}
let u_Result = array_Validator("SS","SS","Ss","Ss");
console.log(u_Result);
答案 2 :(得分:0)
请注意内循环的第一次迭代:您在if
和else
块上有一个 return 语句。因此,该函数将始终在内部循环的第一次迭代中返回。
为什么输入数据true
的结果是"SS","SS","Ss","Ss"
?
因为在第一次迭代中,对于x = i = 0
,表达式m_array[i] !== m_Array[x+1]
的计算结果为m_array[0] !== m_Array[1]
,结果为"SS" !== "SS"
。然后将最后一个表达式求值为false
,并使用else
块返回true
值。
无需使用嵌套循环来检查array
上的所有元素是否相等。现在,您可以在这种情况下使用Array.every()。
function array_Validator(e1, e2, e3, e4)
{
let m_Array = [e2, e3, e4];
return m_Array.every(elem => elem === e1);
}
console.log(array_Validator("SS","SS","Ss","Ss"));
console.log(array_Validator("SS","SS","SS","Ss"));
console.log(array_Validator("SS","SS","SS","SS"));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
答案 3 :(得分:-1)
https://stackoverflow.com/a/24968449/11178909
提供的答案,首先不要为此方法使用double for循环