Задача алгоритма сортировки с использованием «для цикла» вместо «для цикла» - проблема - PullRequest
0 голосов
/ 24 сентября 2018

Я решил алгоритм, использующий цикл 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 Ответ

0 голосов
/ 24 сентября 2018

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

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

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

...