Задача алгоритма сортировки с использованием "для цикла" вместо "для цикла" - проблема

Я решил алгоритм, используя цикл for, но я пытался использовать цикл for, чтобы было легче читать, но я не получаю тот же вывод, когда я использовал традиционный цикл for?

const sortByHeight = (a)=>{

const array2 = a.filter(num => {
    if (num !== -1){
        return num
    }
}).sort((a,b) => a-b)

let indexVal = 0;

for ( let num of a){
     if(num !== -1 ){
         num = array2[indexVal]
         indexVal++
     }
 }


return a;

 //for loop does work
//     for ( let i=0; i < a.length; i++){
//     if(a[i] !== -1 ){
//         a[i] = array2[indexVal]
//         indexVal++
//     }
// }
// return a;

console.log(sortByHeight([-1, 150, 190, 170, -1, -1, 160, 180]));}

1 ответ

Решение

num является локальной переменной внутри цикла Присвоение ему не приводит к изменению соответствующего элемента в массиве. Это похоже на то, как назначение параметра функции не влияет на аргумент, который был передан функции.

Лучше всего придерживаться индексации массива, как вы это делали раньше. использование for...of когда вы хотите перебрать массив и просто прочитать его. Это не позволяет перезаписывать элементы, как вы пытаетесь сделать, хотя.

Если вы действительно хотели использовать for...of, вы можете сжать массив для сортировки с другим массивом индексов, чтобы вы могли индексировать при необходимости, но вы теряете любое преимущество читабельности for...of в таком случае.

Другие вопросы по тегам