javascript - 循环遍历 2 个数组并通过扭曲找到差异
问题描述
好的,所以这对我来说有点难以理解,所以我希望你们中的一个人能够提供帮助。一点上下文,这是我写的更新程序,它从 CDN 中获取文件的 xml 列表,然后将其与旧列表进行比较以查找文件差异,以便我知道哪些文件已过时并且需要重新下载。现在我无法找到合适的解决方案。
目前我有 3 个数组。Array1、Array2 和 DiffArray。Array1 存储来自 CDN 的 xml 条目..即主 Array2 存储我们当前拥有的旧条目..即从属 Array3 存储两者之间更改的差异。
这是每个数组中的信息示例。请注意,每个新行都被解析为其对应数组的单独索引
阵列1:
cbt/ar/816.mp3
2019-06-05T16:40:33.212Z
cbt/ar/817.mp3
2019-06-05T16:40:31.509Z
cbt/ar/818.mp3
2019-04-05T16:40:30.978Z
cbt/ar/819.mp3
2019-04-05T16:40:29.807Z
数组2:
cbt/ar/816.mp3
2019-04-05T16:40:33.212Z
cbt/ar/817.mp3
2019-04-05T16:40:31.509Z
cbt/ar/818.mp3
2019-04-05T16:40:30.978Z
cbt/ar/819.mp3
2019-04-05T16:40:29.807Z
有几点需要注意: 1.) 这是一个文件名列表,以及它的最后修改日期 2.) 如您所见,array1 有一个 816.mp3 和 817.mp3 的新文件
我们的想法是查看,注意哪些文件不同,然后使用更新的版本重新下载这些文件。
这是我目前拥有的,但正如您所见,它不是适合这项工作的解决方案:
var a = [];
for (var x = 0; x < remoteArray.length; x++) {
a[remoteArray[x]] = true;
}
for (var y = 0; y < localArray.length; y++) {
if (a[localArray[y]]) {
delete a[localArray[y]];
} else {
a[localArray[y]] = true;
}
}
for (var z in a) {
diffArray.push(z);
log.info("::DIFFERENCES::" + z);
}
}
此当前代码仅输出实际的文字差异,并不能真正帮助我知道哪个文件不同,以便我可以更新它
解决方案
不确定这是否是您想要的结果格式,但它确定了哪些文件需要更新:
# Make a dictionary matching each cdn file to its timestamp
cdn = {}
for i in range(0,len(Array1),2):
cdn[Array1[i]] = Array1[i+1]
# Make an array of files needing to be updated
update = []
for i in range(0,len(Array2),2):
path = Array2[i]
# If file is in CDN and the one there is newer, add it to update
if path in cdn and cdn[path] > Array2[i+1]:
update.append( path )
推荐阅读
- java - Rolling dice program
- security - 如何从 HAPROXY 禁用特定密码套件 - 我可以这样做“ssl-default-bind-ciphers no RC4-MD5”
- python - 在后台使用 python 运行 bash 命令而不杀死它
- python - 如果它包含熊猫中的某个值,则删除一行
- installation - 是否可以在 ubuntu 桌面操作系统中安装 openstack 控制器节点
- mysql - 排序规则 utf8_general_ci 不适用于 Heroku
- css - 为什么 html { font-size: 1rem; } 创建 1px 右边框?
- angular - 如何访问 matTabNavBar.updateActiveLink 方法
- java - 使用 YAML-CPP 将 YAML 值添加到标准映射
- python - 尝试在 Python 中使用 matplotlib 保存图形动画 - “无效文件对象:<_io.BufferedReader name=76>”