【JavaScript】数组反转reverse()会改变原顺序的解决方案

  • Post author:
  • Post category:java


例如有一个Vue项目,使用列表默认是顺序渲染的,如果要倒序,就reverse()可以了么,其实不然



一个问题

首先看一个

Vue

例子,

template模板如下

<block v-for="(item,index) in revImages" :key="index">
	<image class="layer" :src="item.src" :style="{
		left:item.left+'px',
		top:item.top+'px',
		width:item.width+'px',
		height:item.height+'px',
		display:item.isDisplay?'block':'none'
	}"></image>
</block>

script脚本逻辑如下

export default {
	data(){
		return {
			images:[...],
		}
	},
	computed:{
		revImages(){
			return this.images.reverse();
		},
	},
}

其中获取的

revImages

已反转,若下次有变化,

images

又跟着反转回来,显然这是不对的,

实际上,我们看到的

revImages

就是

images

的引用,或投影

请添加图片描述


因果与心理学

:看得见的只是现相,看不见的才是本质.



解决问题

这样做,使用它的索引,倒序就可以了,

export default {

	computed:{
		revImageIndexs(){
			let indexs = [];
			for(let i=this.images.length-1; i>=0; i--) indexs.push(i);
			return indexs;
		},
	},
}


revImageIndexs

就是封装成一个索引数组

然后,渲染页面改成这样,渲染列表就能倒序了

<block v-for="(item,index) in revImageIndexs" :key="index">
	<image class="layer" :src="images[item].src" :style="{
		left:images[item].left+'px',
		top:images[item].top+'px',
		width:images[item].width+'px',
		height:images[item].height+'px',
		display:images[item].isDisplay?'block':'none'
	}"></image>
</block>

最后看完,领悟了吗,来都来了,点个赞再走呗~

请添加图片描述



版权声明:本文为zs1028原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。