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

例如有一个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>

最后看完,领悟了吗,来都来了,点个赞再走呗~
请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TA远方

谢谢!收到你的爱╮(╯▽╰)╭

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值