javascript - 如何在过滤多维数组时解决这个问题,数组获得更多元素?
问题描述
我有一个名为“ Places ”的多维数组,如下所示:
0: Array [ 1, 1 ]
1: Array [ 1, 2 ]
2: Array [ 1, 3 ]
3: Array [ 1, 4 ]
4: Array [ 1, 5 ]
5: Array [ 2, 1 ]
6: Array [ 2, 2 ]
7: Array [ 2, 3 ]
8: Array [ 2, 4 ]
9: Array [ 2, 5 ]
10: Array [ 3, 1 ]
11: Array [ 3, 2 ]
12: Array [ 3, 3 ]
13: Array [ 3, 4 ]
and so on until [ 5, 5 ]
我还有另一个数组(称为“占用”):
0: Array [ 1, 5 ]
而且我有一个 for-in 循环,它创建一个新数组(“ unOccupied ”),其中包含“ Places ”中的所有东西,除了那些也在“占用”中的东西。这是代码:
for(var arr in Places){
for(var filtered in occupied){
if(Places[arr][0] !== occupied[filtered][0] || Places[arr][1] !== occupied[filtered][1]){
unOccupied.push(Places[arr]);
}
}
}
我所期望的是,unOccupied 变成了这样:
0: Array [ 1, 1 ]
1: Array [ 1, 2 ]
2: Array [ 1, 3 ]
3: Array [ 1, 4 ]
4: Array [ 2, 1 ]
5: Array [ 2, 2 ]
and so on until [ 5, 5 ]
所以,这是“ Places ”的副本,但没有“占用”的元素。
如果“占用”包含 1 个元素,则一切正常,“未占用”包含 24 个元素。但是如果“占用”包含例如 2 个元素,“未占用”确实有 48 个元素,并且“地方”拥有的所有内容都是双倍的,除了也在“占用”中的元素。
如果“占用”包含更多元素,“未占用”也包含更多元素。但为什么?以及如何解决?
提前致谢!
解决方案
您的循环不完整:
怎么了?
for(var arr in Places){
for(var filtered in occupied){
if(Places[arr][0] !== occupied[filtered][0] || Places[arr][1] !== occupied[filtered][1]){
unOccupied.push(Places[arr]);
}
}
}
它只适用于一个元素,occupied
因为它只在当前位置迭代一次arr
。当您有更多项目时,如果条件有效,则occupied
在同一个地方迭代 n 次,将其插入 n 次。arr
因此,您需要定义何时必须添加一个地点,unoccupied
即当一个地点不在时occupied
。
for(var arr in Places){
let isOccupied = false;
for(var filtered in occupied){
if(Places[arr][0] === occupied[filtered][0] || Places[arr][1] === occupied[filtered][1]){
isOccupied = true;
break;
}
}
!isOccupied && unOccupied.push(Places[arr]);
}
您也可以通过以下方式改进:
const unoccupied = Places.filter(place => occupied.every(occ => occ[0] !== place[0] || occ[1] !== place[1]))
推荐阅读
- r - 保存脚本文件后发生错误
- angular - 如何在应用程序初始化时启动一个长时间运行的进程(API 请求)而不阻塞 Angular 应用程序的加载?
- kubernetes - kubeflow 卡在管道启动中:无法附加或安装卷:未安装的卷 = [mlpipeline-minio-artifact]
- sql - PostgreSQL 汇总特征查询
- azure-devops - 业力单元测试结果未推送到声纳
- microservices - 当一个聚合上的大多数操作时,如何将单体应用程序拆分为微服务?
- python - 如何使在子进程中运行的命令保存到对象而不是文件之类的文件中?
- c# - 使用 Entity Framework Core 的 OnModelCreating 上的空引用异常
- javascript - 如何使用 JS 设置 .env
- javascript - 使用主滚动条的滚动框