函数在迭代过程中返回True而不是False

时间:2019-05-30 20:30:15

标签: javascript arrays

我在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。

4 个答案:

答案 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)

请注意内循环的第一次迭代:您在ifelse块上有一个 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循环