Pasos para reproducir: 1: Visite https://www.chess.com/play/computer 2: Pegue el código JS en la consola
Resultados esperados: Las piezas se imprimen por su número de cuadrado de forma ascendente
Resultados reales: Uncaught TypeError: newPieces.sort is not a function
Código JS:
pieces = ["r","n","b","q","k","p"]; colors = ["w","b"]; squareTemplate = "square-"; boardTemplate = "chess-board.layout-board"; function updatePieces(){ return document.querySelectorAll("chess-board.layout-board .piece"); } function getFen(isFlipped){ } function evalMove(){ } console.log("Starting up ..."); const board = document.querySelector(boardTemplate); let newPieces = []; newPieces = updatePieces(); newPieces.sort(function(a,b){return a.classList[2].split('-')[1] - b.classList[2].split('-')[1]}); let fenRows = []; for(i=0;i<newPieces.length;i++){ let classList = newPieces[i].classList; let pieceColor = classList[1][0]; let pieceType = classList[1][1]; let pieceSquare = classList[2].split('-')[1]; //console.log(" Piece color is: " + pieceColor + " it is: " + pieceType + " and it is in: " + pieceSquare); if(pieceColor == 'w'){ pieceType.toUpperCase(); } else { pieceType.toLowerCase(); } fen } Entonces, básicamente, JS está tratando de decirme que no es una matriz, bueno, si no es una matriz, entonces nací en Bangladesh, porque se let newPieces = [];
La función updatePieces no devuelve una array , y el método de sort solo funciona en matrices, primero verifique la salida de la función updatePieces()
sort() es un método ubicado en Array.prototype que es lo que desea usar donde querySelectorAll() devuelve una lista de nodos estática que representa una lista de los elementos del documento que coinciden con el grupo especificado de selectores, no con una matriz. es por eso que obtienes tu excepción. si desea utilizar la ordenación, debe convertirla en una matriz.
Puede convertirlo en una matriz usando array.from
const pieces = document.querySelectorAll("chess-board.layout-board .piece"); const arr = Array.from(pieces);