JavaScript, чтобы проверить, какое из заданных чисел отличается от другого

#javascript #arrays #function

#javascript #массивы #функция

Вопрос:

Я застрял на проблеме. Я хочу напечатать индекс массива, который отличается от других элементов этого массива четностью. Чтобы быть более конкретным, ввод будет выглядеть как 5 четных чисел и 1 нечетное число. Итак, выведите позицию (индекс 1) нечетного числа.

Мой код

 function Test(numbers){

    var e = 0;  		//number of even numbers
    var o = 0;  		//number of odd numbers

    console.log(numbers.length);

  for(var i = 0; i < numbers.length; i  ){
  
    if(numbers[i] % 2 == 0){
      e  ;
      var pose = i;            //index of even no
  	}
    else{
	  o  
      var poso = i;				//index of odd number
	}
    
   }

   if(e==1){                 //only one even number
     console.log(pose 1);     
   }
   else if(o==1){            //only one odd number
     console.log(poso 1);
   }
   else{
     console.log("no number differs");   
   }
}


Test("2 4 7 8 6");  

Ожидаемый результат = ‘3’;

Консоль печатает :

«число не отличается».

Я отладил и нашел проблему. console.log(numbers.length) ; печатает 9. То есть оно также включает пробелы. То же самое, если мы поставим запятую ‘,’ между числами. Также, если есть двузначное число, оно рассматривает их как 2 отдельных элемента.

Теперь я знаю, что могу добавить код в начале, чтобы проверить, является ли i = 1,3,5 … чтобы разорвать цикл, но я хотел бы знать, есть ли лучшее решение. Также, если решение передает массив в другом формате, я хотел бы знать, как мы можем исправить код, если мы хотим передать, как указано выше.

Комментарии:

1. Извините, консоль выводит 5. Но это все равно неправильно.

2. «Я хочу напечатать индекс массива» — Ну, тогда почему бы вам на самом деле не передать массив чисел в функцию: Test([2, 4, 7, 8, 6]) ? В настоящее время вы передаете строку, а не массив. Или в первой строке вашей функции преобразуйте строку чисел в массив с numbers = numbers.split(/s /); помощью .

3. Спасибо всем! Я чувствую себя таким тупым …. @nnnnnn приветствует и этот метод разделения!

Ответ №1:

Передайте массив в качестве аргумента, как показано ниже.

 function Test(numbers){

    var e = 0;  		//number of even numbers
    var o = 0;  		//number of odd numbers

    console.log(numbers.length);

  for(var i = 0; i < numbers.length; i  ){
  
    if(numbers[i] % 2 == 0){
      e  ;
      var pose = i;            //index of even no
  	}
    else{
	  o  
      var poso = i;				//index of odd number
	}
    
   }

   if(e==1){                 //only one even number
     console.log(pose 1);     
   }
   else if(o==1){            //only one odd number
     console.log(poso 1);
   }
   else{
     console.log("no number differs");   
   }
}


var x = [2,4,7,8,6];
Test(x);  

Ответ №2:

Ваша программа в полном порядке. Я думаю, проблема в том, как вы передаете данные в свой функциональный тест.

Вы передаете строку вместо массива. это должно быть похоже:

Тест ([2,4,7,8,6]);

Также, если вы хотите передать его как строку, просто убедитесь, что вы разделили строку запятой ‘,’ и создали массив чисел, а затем передали его в цикл for .

Ответ №3:

В вашем коде вы передаете аргумент в виде строки, но я предполагаю, что вам может потребоваться передать массив. Если это так, то вы можете заглянуть в метод array#forEach

Надеюсь, этот фрагмент будет полезен

 function Test(numbers) {
  // looping through the array
  numbers.forEach(function(item, index) {
    //checking if it is odd or even
    if (item % 2 == 0) {
      console.log("current number is Even amp; its index is "   index);
    } else {
      //updating index
      var modIndex = index 1;
      console.log("current number is Odd amp; its modified index is "   modIndex);
    }


  })
}

var num = ['2','4','7','8','6']

Test(num);
  

ДЕМОНСТРАЦИЯ