Estoy creando una aplicación de tarjeta flash que deberá poder ordenar alfabéticamente listas de mazos, cartas, etc. y quiero usar una función de clasificación rápida para todos ellos en lugar de crear una función de clasificación para cada uno. Pensé que simplemente pasaría la matriz de objetos y la clave que contiene el contenido que se ordenará como argumentos a la función, pero no se ordena correctamente.
El siguiente código que había escrito para ordenar las tarjetas alfabéticamente por la propiedad 'pregunta' del objeto de la tarjeta funciona:
const pivot = (arr, start) => { let pivotVal = arr[start]['question'].toUpperCase(); let swapIdx = start; for(let a = start + 1; a < arr.length; a++){ if(pivotVal > arr[a]['question'].toUpperCase()){ swapIdx++; swap(arr, swapIdx, a); } }; swap(arr, start, swapIdx); return swapIdx; } const alphabetize = (arr, start = 0, end = arr.length - 1) => { if(start < end){ let pivotIdx = pivot(arr, start); alphabetize(arr, start, pivotIdx - 1) alphabetize(arr, pivotIdx + 1); } return arr; } setCards(alphabetize(newCards, 0, cards.length - 1)); //(useState hook)Pero luego, tratar de hacerlo universalmente utilizable al pasar una clave como argumento con el siguiente código no:
const pivot = (arr, start, comparand) => { let pivotVal = arr[start][`${comparand}`].toUpperCase(); let swapIdx = start; for(let a = start + 1; a < arr.length; a++){ if(pivotVal > arr[a][`${comparand}`].toUpperCase()){ swapIdx++; swap(arr, swapIdx, a); } }; swap(arr, start, swapIdx); return swapIdx; } const alphabetize = (arr, start = 0, end = arr.length - 1, comparand) => { if(start < end){ let pivotIdx = pivot(arr, start, comparand); alphabetize(arr, start, pivotIdx - 1, comparand) alphabetize(arr, pivotIdx + 1, comparand); } return arr; } setCards(alphabetize(newCards, 0, cards.length - 1, 'question')); //(useState hook)No se rompe ni nada; simplemente no está ordenando alfabéticamente la lista. Leí las respuestas a esta publicación En JavaScript, ¿cómo puedo usar un parámetro de función como clave para un objeto? y parecía que el uso de literales de plantilla para claves dinámicas debería funcionar. ¿Alguna idea de lo que está mal con el segundo bloque de código?