javascript - 我需要一种好方法来从javascript中的数组中对每个类别中的文件名进行分类,但是当没有将匹配项放入一般组时
问题描述
基本上,我有两个数组,一个是文件的类型,另一个是实际的文件名,所以,我需要验证每个文件名并搜索一个特定的字符串,然后,分组,但有一些规则,例如,对于新版本文件,该组必须按顺序名称 ASC 并且一般必须具有与类型不匹配的那些和具有其中类型的那些。(我需要使用纯 Javascript 来执行此操作)示例:
types: ["general","picture","document","annotation"]
files: [
{name:"-t_picture_t-my_vacation.jpg"},
{name:"-t_document_t-my_curriculum.pdf"},
{name:"my_favorite_music.mp3"},
{name:"my_dance_video.mp4"},
{name:"-t_annotation_t-dont_forget.txt"},
]
预期的结果是这样的:
[
{name:"my_dance_video.mp4"},
{name:"my_favorite_music.mp3"},
{name:"-t_picture_t-my_vacation.jpg"},
{name:"-t_document_t-my_curriculum.pdf"},
{name:"-t_annotation_t-dont_forget.txt"},
]
有任何问题,只需留言即可。
解决方案
嗯......一个简单的算法将是这样的
const types = ["picture","document","annotation", "general"]
const files = [
{name:"-t_picture_t-my_vacation.jpg"},
{name:"-t_document_t-my_curriculum.pdf"},
{name:"my_favorite_music.mp3"},
{name:"my_dance_video.mp4"},
{name:"-t_annotation_t-dont_forget.txt"},
]
const result = []
const matches = {}
for (const file of files) {
for (const type of types) {
if (file.name.includes(type)) {
result.push(file)
matches[file.name] = true
} else if (type == 'general' && !matches[file.name]) {
result.unshift(file)
}
}
}
console.log(result)
缺点是我们需要等待general
类别直到最后,因为只有当我们完成排序后,我们才能添加其余项目而不会重复
希望这有助于您启动解决方案。享受
推荐阅读
- twilio - Twilio,pstn 啜饮,使用网络处理程序获取帐户 ID 等?
- python - 如何从满足Python中某些条件的列表中获取所有对
- c - C for 和 while 循环随机重复自己
- excel - 尝试从列表中提取电子邮件地址时出现 Excel VBA 错误
- java - JpaSpecificationExecutor
似乎不像 JpaRepository 那样工作 - python - 是否可以从 python 脚本检查 OS X 可访问性设置?
- javascript - 在 React.js 中按索引访问对象数组
- javascript - 如何在谷歌地图上平移时保持下拉和按钮固定
- google-bigquery - 使用字符串输入在 Bigquery 中添加 Date_Add :
- jquery-ui - jquery ui --> 拖动后切换可拖动的 div --> 其他 div 移动