В чем разница между использованием переменной и элемента массива, когда я меняю местами два элемента путем деструктурирования присваивания

#javascript #arrays #destructuring

#javascript #массивы #деструктурирование

Вопрос:

Я изучаю быструю сортировку, и вот мой код ниже:

 const pivot2 = (arr, low = 0, high = arr.length -1) => {
    let pivot = arr[low];
    let index = low;

    for(let i = low   1; i <= high; i  ){
        if(pivot > arr[i]){
            index  ;
            [arr[index], arr[i]] = [arr[i], arr[index]];           
        }
    }
    [arr[low], arr[index]] = [arr[index], arr[low]];

    return index;
}

const quickSort2 = (arr, low = 0, high = arr.length - 1) => {
    if(low < high){
        let pivot = pivot2(arr, low, high); 
        quickSort2(arr, low, pivot - 1);
        quickSort2(arr, pivot   1, high);
    }

    return arr;
}

console.log(quickSort2([5,2,1,8,4,7,6,3]));
  

Однако, когда я использовал pivot вместо arr[low] в выражении функции pivot2, мой ответ не отображался должным образом (он стал [ 5, 5, 5, 5, 5, 7, 7, 8 ], не [ 1, 2, 3, 4, 5, 6, 7, 8 ]). Я думал, что это будет тот же результат, потому что я назначил arr[low] на pivot раньше. Может ли кто-нибудь объяснить мне концепцию или какие-либо идеи по этому поводу?

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

1. По той же причине let pivot = arr[low]; pivot = 2 не устанавливается arr[low] на 2 , тогда как arr[low] = 2 выполняется обновление arr[low] . Здесь pivot устанавливается / присваивается значение в arr[low] , так что это просто значение. В то время как arr[low] = 2 обновляет массив с низким индексом до значения 2.

2. Разница в том, что ваш цикл меняет местами элементы между определением pivot и использованием arr[low]