首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我想从两个-dimensional数组中删除相同的部分

我想从两个-dimensional数组中删除相同的部分
EN

Stack Overflow用户
提问于 2022-07-17 14:59:02
回答 2查看 52关注 0票数 -1

我想比较以下两种安排的脚本删除重复安排。

我使用了过滤器并包含函数或语句,但失败了。

我该怎么办?

代码语言:javascript
复制
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]]

我试过这样做

代码语言:javascript
复制
let ans = ground.filter((r,idx) => {
    for(let i =0; i < deleteBlock.length;i++) {
     if(r === deleteBlock[i]) {
        ground.splice(idx, 1)
     }
    }
})
代码语言:javascript
复制
ground.filter((r) => deleteBlock.forEach(ele=> r.includes(ele)))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-17 15:13:15

您可以创建一个比较两个数组的arrayEqual函数

代码语言:javascript
复制
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;
}

然后像下面这样使用它

代码语言:javascript
复制
let ground = [...];
let filtered = ground.filter(x => deleteBlock.every(y => !arrayEqual(x,y)));
票数 1
EN

Stack Overflow用户

发布于 2022-07-17 15:09:52

如果将两个数组与相同的属性进行比较,则始终会得到false。例如,1 === 1总是返回false,因为它们都是一个全新的数组对象,内容完全相同。

因此,您应该循环两个数组,并逐一比较它们的每个属性,或者在您的情况下,因为我假设类型不是必需的,您可以解构它们,然后像下面这样比较字符串:

代码语言:javascript
复制
const filtered = ground.filter((row) => { return row.join() !== deleteBlock.join(); });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73012837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档