我想比较以下两种安排的脚本删除重复安排。
我使用了过滤器并包含函数或语句,但失败了。
我该怎么办?
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]]我试过这样做
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)))发布于 2022-07-17 15:13:15
您可以创建一个比较两个数组的arrayEqual函数
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;
}然后像下面这样使用它
let ground = [...];
let filtered = ground.filter(x => deleteBlock.every(y => !arrayEqual(x,y)));发布于 2022-07-17 15:09:52
如果将两个数组与相同的属性进行比较,则始终会得到false。例如,1 === 1总是返回false,因为它们都是一个全新的数组对象,内容完全相同。
因此,您应该循环两个数组,并逐一比较它们的每个属性,或者在您的情况下,因为我假设类型不是必需的,您可以解构它们,然后像下面这样比较字符串:
const filtered = ground.filter((row) => { return row.join() !== deleteBlock.join(); });https://stackoverflow.com/questions/73012837
复制相似问题