Me gustaría comparar los dos arreglos del siguiente script para eliminar el arreglo duplicado.
Utilicé la función Filtro e incluye o declaración for pero fallé.
¿Qué tengo que hacer?
let ground = [ [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,3,3,7,7,7,7,8,8,4,4,4,2,2,3,7,1], [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1], ] let deleteBlock = [[1,3,3,7,7,7,7,8,8,4,4,4,2,2,3,7,1]]lo intenté de esta manera
let ans = ground.filter((r,idx) => { for(let i =0; i < deleteBlock.length;i++) { if(r === deleteBlock[i]) { ground.splice(idx, 1) } } }) ground.filter((r) => deleteBlock.forEach(ele=> r.includes(ele)))Si compara dos matrices con las mismas propiedades, siempre obtendrá falso. Por ejemplo, [1] === [1] siempre devuelve falso, ya que cada uno de ellos es un objeto de matriz completamente nuevo con contenidos idénticos.
Por lo tanto, debe recorrer ambas matrices y comparar cada una de sus propiedades una por una o, en su caso, dado que asumo que el tipo no es esencial, podría deconstruirlas y luego comparar las cadenas de esta manera:
const filtered = ground.filter((row) => { return row.join() !== deleteBlock.join(); });Podría crear una función arrayEqual que compare dos matrices
function arrayEqual(arr1, arr2) { if (arr1.length !== arr2.length) return false; for (let i = 0; i < arr1.length; i++) if (arr1[i] !== arr2[i]) return false; //adapt equality test if you have complex objects return true; }y luego utilícelo de la siguiente manera
let ground = [...]; let filtered = ground.filter(x => deleteBlock.every(y => !arrayEqual(x,y)));