javascript - 在不同文件的数组中查找重复名称
问题描述
与我上面建议的用例有点不同。我需要遍历并检查文件数组中的每个文件名,并将具有相同名称的文件推送到新数组中,以便稍后单独上传它们。
到目前为止,这是我的代码,当然我的条件检查有问题,有人能看到我做错了什么吗?
filesForStorage = [
{id: 12323, name: 'name', ...},
{id: 3123, name: 'abc', ...},
{id: 3213, name: 'name', ...},
...
]
filesForStorage.map((image, index) => {
for (let i = 0; i < filesForStorage.length; i++) {
for (let j = 0; j < filesForStorage.length; j++) {
if (
filesForStorage[i].name.split(".", 1) ===. //.split('.', 1) is to not keep in consideration the file extension
filesForStorage[j].name.split(".", 1)
) {
console.log(
"----FILES HAVE THE SAME NAME " +
filesForStorage[i] +
" " +
filesForStorage[j]
);
}
}
}
解决方案
使用map
而不返回任何东西使它几乎毫无意义。您可以使用forEach
,但是当您在其中使用双循环时,这同样毫无意义——这意味着您将在foreach
(或map
在您的情况下)循环一次,然后再循环两次,从而导致令人眼花缭乱的糟糕性能。
您真正想做的是将您的项目分组name
,然后选择具有超过 1 个元素的任何组
const filesForStorage = [
{id: 12323, name: 'name'},
{id: 3123, name: 'abc'},
{id: 3213, name: 'name'}
]
const grouped = Object.values(
filesForStorage.reduce( (a,i) => {
a[i.name] = a[i.name] || [];
a[i.name].push(i);
return a;
},{})
);
console.log(grouped.filter(x => x.length>1).flat());
推荐阅读
- hive - Hive 仅插入事务表
- python - 输入包含 NaN、无穷大或对于 Django 项目中的 dtype('float64') 而言太大的值
- python - Windows 10 中的“无法从‘信号’导入名称‘SIGPIPE’”
- scala - 如何从顶点输入文件创建 VertexRDD?
- ruby-on-rails - 我可以在我的代码的一个 simple_form 中禁用 select2 吗?
- java - Reactive Mongo - DeleteAllBy... 查询 - 找不到类型类 java.lang.Void 的 PersistentEntity
- java - Java 节点交换
- php - 尝试在 woocommerce 的结帐页面中的总部分之后放置自定义字段
- sql-server-2016 - DATEPART MILLISECONDS 从 COMPATIBILITY_LEVEL 120 到 130 的差异
- node.js - 保护我的 ExpressJS 服务器路由,它们将通过 cURL 访问