.sort 不是数组上的函数

.sort is not a function on an array

重现步骤: 1: 访问 https://www.chess.com/play/computer 2:在控制台粘贴JS代码

预期结果: 棋子按平方数递增打印

实际结果: Uncaught TypeError: newPieces.sort is not a function 抛出错误

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
}

所以,基本上 JS 是在试图告诉我那不是数组,好吧,如果不是数组,那我就出生在孟加拉国,因为它是 let newPieces = [];

sort() 是位于 Array.prototype 上的一种方法,它是您想要使用的 querySelectorAll() returns 表示文档元素列表的静态 NodeList匹配指定的选择器组而不是数组。这就是你得到例外的原因。如果要使用排序,则需要将其转换为数组。

您可以使用 array.from

将其转换为数组
const pieces = document.querySelectorAll("chess-board.layout-board .piece");
const arr = Array.from(pieces);

updatePieces 函数不返回 array,而 sort 方法仅适用于数组,请先检查 updatePieces() 函数输出