Je travaille sur l'écriture de ma propre fonction de tri de fusion récursive depuis javascript, mais chaque fois que je la teste avec un tableau de nombres, l'erreur suivante s'affiche: "TypeError: Impossible de lire la propriété 'length' de undefined"Erreur de fonction de tri de fusion récursive: Impossible de lire la propriété 'longueur' de indéfini
Je n'ai aucune idée de la raison pour laquelle je reçois cette erreur, car les seuls endroits où j'utilise la propriété "length" sont sur mon argument arrech (dans la fonction mergeSort) et sur sous-matrices de ce tableau (dans la fonction de fusion). Ma fonction de fusion fonctionne déjà parfaitement lorsqu'elle est testée seule lorsqu'elle reçoit deux tableaux triés de n'importe quelle longueur.
Voici mon code entier:
function merge(arrayOne, arrayTwo){
let sorted = []
while(arrayOne.length > 0 && arrayTwo.length > 0){
if(arrayOne[0] < arrayTwo[0]){
sorted.push(arrayOne.shift());
} else{
sorted.push(arrayTwo.shift());
}
}
return sorted.concat(arrayOne).concat(arrayTwo);
}
function mergeSort(array){
let arrayLength = array.length;
let midpoint = arrayLength/2;
let firstHalf = array.slice(0, midpoint);
let secondHalf = array.slice(midpoint, arrayLength);
if(arrayLength < 2){
return array;
} else{
merge(mergeSort(firstHalf), mergeSort(secondHalf));
}
}
Avec le code donné, le seul endroit où vous utilisez length est 'while (arrayOne.length> 0 && arrayTwo.length> 0) {' Votre erreur, impossible de lire la longueur de undefined, donc 'arrayOne' et/ou' arrayTwo 'est indéfini – Huangism