找出给定数字中哪一个与Javascript中的其他数字不同

找出给定数字中哪一个与Javascript中的其他数字不同,javascript,for-loop,indexing,split,Javascript,For Loop,Indexing,Split,我正在努力解决这个问题。有一个数字串,在给定的数字中,程序会找到一个均匀度不同的数字,并返回该数字的位置。元素必须通过其索引返回(数字是数字所在的实际位置)。如果其索引为0,则必须将其作为1返回。到目前为止我已经有了这个,但它还没有通过一次测试。我不太清楚为什么,因为我觉得应该这样。有人能看到错误是什么吗?感谢您的帮助 function iqTest(numbers) { var num = numbers.split(" "); var odd = 0; var eve

我正在努力解决这个问题。有一个数字串,在给定的数字中,程序会找到一个均匀度不同的数字,并返回该数字的位置。元素必须通过其索引返回(数字是数字所在的实际位置)。如果其索引为0,则必须将其作为1返回。到目前为止我已经有了这个,但它还没有通过一次测试。我不太清楚为什么,因为我觉得应该这样。有人能看到错误是什么吗?感谢您的帮助

function iqTest(numbers) {
    var num = numbers.split(" ");
    var odd = 0;
    var even = 0;
    var position = 0;
    for(var i = 0; i < num.length; i++) {
        if(num[i]%2!==0) {
           odd++;
           if(odd===1) {
              position = num.indexOf(num[i]) + 1;
             }
        }
        else if(num[i]%2===0) {
           even++;
           if(even===1) {
           position = num.indexOf(num[i]) + 1;
            }
          }
    }
    return position;
}
iqTest("2 4 7 8 10") output 3
iqTest("2 1 2 2") output 2
iqTest("1 2 2") outputs 2 when it should be 1 
功能测试(数字){
var num=数字。拆分(“”);
var奇数=0;
var偶数=0;
var位置=0;
对于(变量i=0;i
您必须定义不同的“均匀度”。对这两种情况使用不同的计数器,如果没有不同的计数器,则返回-1。大概是这样的:

    function iqTest(numbers) {
    var num = numbers.split(" ");
    var odd = 0;
    var even = 0;
    var positionOdd = 0;
    var positionEven = 0;
    for(var i = 0; i < num.length; i++) {
       if(num[i]%2!==0) {
       odd++;
       if(odd===1) {
       positionOdd = i + 1;
         }
       }
       else if(num[i]%2===0) {
       even++;
       if(even===1) {
       positionEven = i + 1;
        }
      }
    }
    if (odd == 1)
       return positionOdd;
    else if (even == 1)
       return positionEven;
    else
       return -1;
   }
功能测试(数字){
var num=数字。拆分(“”);
var奇数=0;
var偶数=0;
var位置奇数=0;
var=0;
对于(变量i=0;i
请注意,如果您正好有一个偶数和一个奇数,后者将使用我的方法返回。从我的解决方案开始,根据您的意愿调整逻辑

你必须定义哪个“均匀度”是不同的。对这两种情况使用不同的计数器,如果没有不同的计数器,则返回-1。大概是这样的:

    function iqTest(numbers) {
    var num = numbers.split(" ");
    var odd = 0;
    var even = 0;
    var positionOdd = 0;
    var positionEven = 0;
    for(var i = 0; i < num.length; i++) {
       if(num[i]%2!==0) {
       odd++;
       if(odd===1) {
       positionOdd = i + 1;
         }
       }
       else if(num[i]%2===0) {
       even++;
       if(even===1) {
       positionEven = i + 1;
        }
      }
    }
    if (odd == 1)
       return positionOdd;
    else if (even == 1)
       return positionEven;
    else
       return -1;
   }
功能测试(数字){
var num=数字。拆分(“”);
var奇数=0;
var偶数=0;
var位置奇数=0;
var=0;
对于(变量i=0;i

请注意,如果您正好有一个偶数和一个奇数,后者将使用我的方法返回。从我的解决方案开始,根据您的意愿调整逻辑

您的代码过于复杂


因为第一个数字决定了你要找的是偶数还是奇数,所以要分别计算。然后,找到第一个不匹配的数字

function iqTest(numbers) {
    numbers = numbers.split(" ");
    var parity = numbers.shift() % 2;
    for( var i=0; i<numbers.length; i++) {
        if( numbers[i] % 2 != parity) {
            return i+2; // 1-based, but we've also skipped the first
        }
    }
    return 0; // no number broke the pattern
}
function iqTest(numbers){
   // ...
   const numArr = numbers.split(' ');

   const checkStatus = num => (parseInt(num) % 2) ? 'odd' : 'even';

   const findUniqueStatus = array => {
      let numEvens = 0;

      array.forEach(function(value){
         if (checkStatus(value) == 'even') { numEvens++; }
      });

      return (numEvens === 1) ? 'even' : 'odd'
   }

     let statuses = numArr.map(checkStatus),
     uniqueStatus = findUniqueStatus(numArr);

     return statuses.indexOf(uniqueStatus) + 1;
    }
}
功能测试(数字){
数字=数字。拆分(“”);
var奇偶校验=数字。shift()%2;

对于(var i=0;i,您的代码过于复杂


因为第一个数字决定了你要找的是偶数还是奇数,所以要分别计算。然后,找到与之不匹配的第一个数字

function iqTest(numbers) {
    numbers = numbers.split(" ");
    var parity = numbers.shift() % 2;
    for( var i=0; i<numbers.length; i++) {
        if( numbers[i] % 2 != parity) {
            return i+2; // 1-based, but we've also skipped the first
        }
    }
    return 0; // no number broke the pattern
}
function iqTest(numbers){
   // ...
   const numArr = numbers.split(' ');

   const checkStatus = num => (parseInt(num) % 2) ? 'odd' : 'even';

   const findUniqueStatus = array => {
      let numEvens = 0;

      array.forEach(function(value){
         if (checkStatus(value) == 'even') { numEvens++; }
      });

      return (numEvens === 1) ? 'even' : 'odd'
   }

     let statuses = numArr.map(checkStatus),
     uniqueStatus = findUniqueStatus(numArr);

     return statuses.indexOf(uniqueStatus) + 1;
    }
}
功能测试(数字){
数字=数字。拆分(“”);
var奇偶校验=数字。shift()%2;

对于(var i=0;i而言,最简单的方法是收集子阵列中的所有偶数/奇数位置,并检查哪个阵列的末尾长度为1:

功能测试(数字){
数字=数字。拆分(“”);
var头寸=[],[];
对于(变量i=0;iconsole.log(iqTest(“13 2”))
最简单的方法是收集子阵列中的所有偶数/奇数位置,并检查哪个阵列的末尾长度为1:

功能测试(数字){
数字=数字。拆分(“”);
var头寸=[],[];
对于(变量i=0;ilog(iqTest(“13 2”))
由于第一个数字决定了您要查找的是偶数还是奇数,请分别计算它。 然后,找到第一个不匹配的数字

function iqTest(numbers) {
    numbers = numbers.split(" ");
    var parity = numbers.shift() % 2;
    for( var i=0; i<numbers.length; i++) {
        if( numbers[i] % 2 != parity) {
            return i+2; // 1-based, but we've also skipped the first
        }
    }
    return 0; // no number broke the pattern
}
function iqTest(numbers){
   // ...
   const numArr = numbers.split(' ');

   const checkStatus = num => (parseInt(num) % 2) ? 'odd' : 'even';

   const findUniqueStatus = array => {
      let numEvens = 0;

      array.forEach(function(value){
         if (checkStatus(value) == 'even') { numEvens++; }
      });

      return (numEvens === 1) ? 'even' : 'odd'
   }

     let statuses = numArr.map(checkStatus),
     uniqueStatus = findUniqueStatus(numArr);

     return statuses.indexOf(uniqueStatus) + 1;
    }
}

因为第一个数字决定了你要找的是偶数还是奇数,所以要分别计算。 然后,找到第一个不匹配的数字

function iqTest(numbers) {
    numbers = numbers.split(" ");
    var parity = numbers.shift() % 2;
    for( var i=0; i<numbers.length; i++) {
        if( numbers[i] % 2 != parity) {
            return i+2; // 1-based, but we've also skipped the first
        }
    }
    return 0; // no number broke the pattern
}
function iqTest(numbers){
   // ...
   const numArr = numbers.split(' ');

   const checkStatus = num => (parseInt(num) % 2) ? 'odd' : 'even';

   const findUniqueStatus = array => {
      let numEvens = 0;

      array.forEach(function(value){
         if (checkStatus(value) == 'even') { numEvens++; }
      });

      return (numEvens === 1) ? 'even' : 'odd'
   }

     let statuses = numArr.map(checkStatus),
     uniqueStatus = findUniqueStatus(numArr);

     return statuses.indexOf(uniqueStatus) + 1;
    }
}

请在所有的测试中添加所需的结果。在实现这样的算法之前,考虑使用TDD。它将允许您为给定的输入定义精确的期望,例如“代码> IT”(“应该返回-空字符串1”,()= {期望(IQTEST(“”))。to。
明确定义了如果输入为空,算法需要输出什么。您编写的代码满足此条件,并且在继续修改时,始终确保所有以前编写的测试都通过。这通常会生成干净且不易出现错误的代码。请为所有测试添加所需的结果。未来提示:在执行之前像这样的算法,考虑使用TDD,它可以让你定义精确的Expe。