Javascript For循环在中途重复

Javascript For循环在中途重复,javascript,html,arrays,image,sorting,Javascript,Html,Arrays,Image,Sorting,我有一个按降序排列的图像数组。我想将该数组设置为我网站上的图像列表。在for循环设置图像的过程中,它正好通过for循环的一半,然后从中间开始反转循环,并返回到起点 function sortBy(sort){ if (sort == "newold"){ var sortedImages = Array.from(document.getElementsByTagName("img")); sortedImages.splice(-1,1); sortedImages

我有一个按降序排列的图像数组。我想将该数组设置为我网站上的图像列表。在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开始的整数集,从1开始递增。 屏幕截图顶部的数组顺序都正确,第一个是sortedImages,第二个是unsortedImages。

问题在于:

unsortedImages[i].dataset.added = sortedImages[i].dataset.added;
两个数组中的DOM节点相同,
unsortedImages[i]
引用了
sortedImages
中的一些节点。在
unsortedmages
中更改节点上添加的
属性,然后在
sortedmages
中更改该属性

为了避免这种情况,您可以用以下代码替换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;
})

那么,如果不这样做,我如何更新页面上的img标签呢?如果我没有这些属性,那么它们就不会更新。所以你想在页面上对图像进行排序而不移动DOM元素,只需更改它们的
src
alt
属性,对吗?如果有办法移动DOM元素,我可以这样做,我只想以最简单的方式重新排列图像。@jimmyshadow1我已经更新了答案,请看一看。