#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);