javascript - For循环中途重复
问题描述
我有一组按降序排列的图像。我想将该数组设置为我网站上的图像列表。在设置图像的 for 循环期间,它正好通过 for 循环的一半,然后从中间开始反转循环并返回开始。
function sortBy(sort){
if (sort == "newold"){
var sortedImages = Array.from(document.getElementsByTagName("img"));
sortedImages.splice(-1,1);
sortedImages.sort(function(a,b){
var contentA =parseInt(a.dataset.added,10);
var contentB =parseInt(b.dataset.added,10);
return (contentB - contentA);
});
console.log(sortedImages);
var unsortedImages = Array.from(document.getElementsByTagName("img"));
unsortedImages.splice(-1,1);
console.log(unsortedImages);
for(i in sortedImages){
console.log(sortedImages[i].dataset.added);
unsortedImages[i].src = sortedImages[i].src;
unsortedImages[i].alt = sortedImages[i].alt;
unsortedImages[i].dataset.download = sortedImages[i].dataset.download;
unsortedImages[i].dataset.added = sortedImages[i].dataset.added;
unsortedImages[i].dataset.supports = sortedImages[i].dataset.supports;
unsortedImages[i].dataset.maker = sortedImages[i].dataset.maker;
}
}
}
它应该按降序列出 dataset.added 值,每个元素都有一个从 1 开始并从那里上升的整数。 数据集列表。在 for 循环中运行时添加的值该屏幕截图顶部的数组都按正确的顺序排列,第一个是 sortedImages,第二个是 unsortedImages。
解决方案
问题在这里:
unsortedImages[i].dataset.added = sortedImages[i].dataset.added;
两个数组中的 DOM 节点是相同的,并且unsortedImages[i]
引用sortedImages
. 您更改added
节点上的属性unsortedImages
,它会在 中更改sortedImages
。
为避免这种情况,您可以for in
使用以下代码替换循环:
const attrs = sortedImages.map(node => ({
src: node.src,
alt: node.alt,
download: node.dataset.download,
added: node.dataset.added,
supports: node.dataset.supports,
maker: node.dataset.maker,
}))
attrs.forEach((item, i) => {
unsortedImages[i].src = item.src;
unsortedImages[i].alt = item.alt;
unsortedImages[i].dataset.download = item.download;
unsortedImages[i].dataset.added = item.added;
unsortedImages[i].dataset.supports = item.supports;
unsortedImages[i].dataset.maker = item.maker;
})
推荐阅读
- c# - C# .net Core 连接字符串格式不正确
- python - Python Findall not finding anything
- python - args elements don't seem to operate within apply function
- python - 编写 Python POO。棉花糖或原生 Python。创建类的最佳方式是什么?
- wordpress - Wordpress - 首先检查插件中的 page.php
- ruby-on-rails - 为什么我的 Rails 没有在现有项目/仓库的新开发环境中运行?
- excel - 无法使用 Excel 中不同工作表中的 vlookup 从表中获取最小值
- regex - 正则表达式'不允许特殊符号或空格',但'允许数字和'大写'或'小写'字母'
- python-3.x - 查找接近的字符串匹配 - 对子字符串单词匹配的重视程度更高
- python - Joblib Parallel 似乎在没有明确错误消息的情况下崩溃