Я застрял в викторине в Udacity для JavaScript на многомерных массивах.

1

Тест состоит из многомерного массива и требует, чтобы мы использовали цикл вложенных циклов для циклического перехода через каждый элемент и заменяли значения, которые делимы на 2 с строками "четный" и "нечетный" для четных и нечетных чисел соответственно. Я не могу распечатать массив с числами, делящимися на 2 на консоль с добавленной строкой.

Я также пробовал использовать.slice() и.splice(), но это тоже не принесло мне желаемых результатов. Ниже моя последняя попытка.

Программирование Quiz - многомерные массивы: вопрос: используйте вложенный цикл for, чтобы взять массив чисел ниже и заменить все значения, которые делятся на 2 (четные числа) со строкой "четный", а все остальные числа со строкой " странный".

var numbers = [
[243, 12, 23, 12, 45, 45, 78, 66, 223, 3],
[34, 2, 1, 553, 23, 4, 66, 23, 4, 55],
[67, 56, 45, 553, 44, 55, 5, 428, 452, 3],
[12, 31, 55, 445, 79, 44, 674, 224, 4, 21],
[4, 2, 3, 52, 13, 51, 44, 1, 67, 5],
[5, 65, 4, 5, 5, 6, 5, 43, 23, 4424],
[74, 532, 6, 7, 35, 17, 89, 43, 43, 66],
[53, 6, 89, 10, 23, 52, 111, 44, 109, 80],
[67, 6, 53, 537, 2, 168, 16, 2, 1, 8],
[76, 7, 9, 6, 3, 73, 77, 100, 56, 100]
];

Мой код://создаем цикл вложенных циклов для циклического перехода по каждой строке и столбцу

for(let row = 0; row < numbers.length; row++){
    for(let col = 0; col < numbers.length; col++){

//если четные числа в каждой строке и столбце делятся на 2, замените эти//номера словом even

    if(numbers % 2 === 0){
        numbers[row] += 'even';
        }
    }
}
console.log(numbers);
Теги:
arrays

1 ответ

1
Лучший ответ

Ты очень близко! Дело сводится к тому, как вы ссылаетесь на индекс в двумерном массиве. Итерация по ней во вложенном цикле требует сначала, чтобы мы перебирали строки, а затем столбцы. В вашем примере вы фактически повторяли по столбцам дважды. Чтобы исправить это, вы просто перебираете индекс row массива чисел в вложенном цикле:

    for(let row = 0; row < numbers.length; row++){
        for(let col = 0; col < numbers[row].length; col++){

Затем, наконец, вам нужно будет установить целевые индексные numbers[row][col] до четного. В вашем примере вы использовали оператор присваивания +=, который выполняет то, что является конкатенацией строк. Вместо простого изменения значения индекса до "четного", += фактически добавит слово "четный" в конец номера. Таким образом, вывод индекса будет действительно читать что-то вроде 156even. Просто поместите знак плюс, чтобы переназначить индекс even:

numbers[row][col] = 'even';

    var numbers = [
    [243, 12, 23, 12, 45, 45, 78, 66, 223, 3], 
    [34, 2, 1, 553, 23, 4, 66, 23, 4, 55],
    [67, 56, 45, 553, 44, 55, 5, 428, 452, 3],
    [12, 31, 55, 445, 79, 44, 674, 224, 4, 21],
    [4, 2, 3, 52, 13, 51, 44, 1, 67, 5],
    [5, 65, 4, 5, 5, 6, 5, 43, 23, 4424],
    [74, 532, 6, 7, 35, 17, 89, 43, 43, 66],
    [53, 6, 89, 10, 23, 52, 111, 44, 109, 80],
    [67, 6, 53, 537, 2, 168, 16, 2, 1, 8],
    [76, 7, 9, 6, 3, 73, 77, 100, 56, 100]
    ];

for(let row = 0; row < numbers.length; row++){
    for(let col = 0; col < numbers[row].length; col++){    //iterate over the n-th index of numbers[]
        if(numbers[row][col] % 2 === 0){    //numbers[row][col] points to the nested index
            numbers[row][col] = 'even';    //set index to 'even'
        }
    }
}

console.log(numbers);

Это видео является хорошим объяснением того, как работает итерация над 2d массивами: https://www.youtube.com/watch?v=qdT1P2qmsmU

Видео использует Java, но идея точно такая же.

Надеюсь это поможет! Многомерные массивы трудно обернуть вокруг вашего мозга!

  • 0
    Это сработало отлично! и вы объяснили так, чтобы было легко понять. Спасибо! Кроме того, ссылка на видео очень полезна. Я собираюсь посмотреть больше видео от этого парня.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню