Tengo una lista de coordenadas de cuadrados de una cuadrícula: 
Cada cuadrado está definido por una clase:
class Square { constructor(x, y) { this.x = x; this.y = y; } }Así es como funciona la aplicación: primero se muestra una lista de cuadrados generados aleatoriamente, y luego el usuario tiene que hacer clic en los cuadrados de la memoria. (No necesariamente en orden)
Un ejemplo de cómo sería la matriz de preguntas/respuestas: (solo un ejemplo, en realidad se generan aleatoriamente)
const arr = [new Square(1, 1), new Square(2, 1)]ahora, cada vez que el usuario hace clic en un cuadro, entra en otra matriz:
var selectedBlocks = [new Square(2, 1), new Square(1, 1)]En este caso, dado que los cuadrados seleccionados son iguales, la función debería devolver verdadero.
Lo que he intentado: no puedo obtenerlo sin un bucle doble O (n ^ 2). ¿Es posible optimizar para al menos O (n)?
Puede usar Array.some para encontrar el elemento ya seleccionado o no
class Square { constructor(x, y) { this.x = x; this.y = y; } } const arr = [new Square(1, 1), new Square(2, 1)]; const selectedBlocks = [new Square(2, 1), new Square(1, 1)]; const isSelected = (block) => { return selectedBlocks.some( (item) => item.x === block.x && item.y === block.y ); }; console.log(isSelected(new Square(2, 1))); console.log(isSelected(new Square(2, 2))); console.log(isSelected(new Square(1, 1)));Olvidé que había pocos métodos integrados y escribí esto, supongo (nlogn) Código de complejidad de tiempo
class Square { constructor(x, y) { this.x = x; this.y = y; } pri(){ return this.x + this.y; } } let inp = [new Square(2,1), new Square(2,3), new Square(1,3)] let opt = [new Square(1,3), new Square(2,1), new Square(2,3)] inp.sort((a, b) => { return a.pri() - b.pri(); }); opt.sort((a, b) => { return a.pri() - b.pri(); }); // assuminng they are of same len let flag = true for(i=0; i<inp.length ; i++){ if(inp[i].x != opt[i].x || inp[i].y != opt[i].y){ flag = false break } } console.log(flag)Citando la respuesta a otra pregunta , las respuestas a esa también pueden ayudar. Si solo necesita saber si A y B tienen las mismas entradas, simplemente use
JSON.stringify(A.concat().sort()) === JSON.stringify(B.concat().sort())El enlace a la respuesta original está aquí .