解决JavaScript中数组排序sort不发生改变

最近在做一个项目,Ajax从后台返回数据后,前端用js处理时,发现无论如何使用sort排序,最终要么是没改变,要么只改变最后一次的排序,折腾了很久,最后查了查资料才发现,js中区分…

解决JavaScript中数组排序sort不发生改变

最近在做一个项目,Ajax从后台返回数据后,前端用js处理时,发现无论如何使用sort排序,最终要么是没改变,要么只改变最后一次的排序,折腾了很久,最后查了查资料才发现,js中区分浅拷贝和深拷贝。

varprovinceConfirmedCount=data;varprovinceDeadCount=data;varprovinceCuredCount=data;provinceConfirmedCount.sort(sortBy(("provinceConfirmedCount")));provinceDeadCount.sort(sortBy(("provinceDeadCount")));provinceCuredCount.sort(sortBy(("provinceCuredCount")));console.log(provinceConfirmedCount);//不生效console.log(provinceDeadCount);//不生效console.log(provinceCuredCount);//生效//比较数组对象functionsortBy(field){returnfunction(a,b){returnparseInt(b[field])-parseInt(a[field]);}}浅拷贝、深拷贝与赋值

这三个的区别无法就是改变数据的时候,是如何改变,为了简单明了,用一张表最快理解:

是否指向同一对象第一层为基本数据类型原数据中包含子对象赋值是会使原数据一同改变会使原数据一同改变浅拷贝否不会使原数据一同改变会使原数据一同改变深拷贝是不会使原数据一同改变不会使原数据一同改变解决方案

既然知道了原理,这里的需求是需要全部改变,所以我们可以采用JQuery中的extend方法来处理:

varprovinceConfirmedCount=$.extend([],data);varprovinceDeadCount=$.extend([],data);;varprovinceCuredCount=$.extend([],data);;provinceConfirmedCount.sort(sortBy(("provinceConfirmedCount")));provinceDeadCount.sort(sortBy(("provinceDeadCount")));provinceCuredCount.sort(sortBy(("provinceCuredCount")));console.log(provinceConfirmedCount);console.log(provinceDeadCount);console.log(provinceCuredCount);

语法:$.extend( target, [object1], [objectN] )其中,target为目标类型,这里我用的是数组[],还可以是{},可根据实际情况处理。 从后面的[object1], [objectN]我们可以知道,extend是可以将多个待处理对象合并成一个目标类型的对象。

产品猿社区致力收录更多优质的商业产品,给服务商以及软件采购客户提供更多优质的软件产品,帮助开发者变现来实现多方共赢;

日常运营的过程中我们难免会遇到各种版权纠纷等问题,如果您在社区内发现有您的产品未经您授权而被用户提供下载或使用,您可按照我们投诉流程处理,点我投诉

本文来自用户发布投稿,不代表产品猿立场 ;若对此文有疑问或内容有严重错误,可联系平台客服反馈;

部分产品是用户投稿,可能本文没有提供官方下下载地址或教程,若您看到的内容没有下载入口,您可以在我们产品园商城搜索看开发者是否有发布商品;若您是开发者,也诚邀您入驻商城平台发布的产品,地址:点我进入

如若转载,请注明出处:https://www.chanpinyuan.cn/40865.html;
(0)
上一篇 2023年4月7日 下午4:17
下一篇 2023年4月7日 下午4:17

相关推荐

发表回复

登录后才能评论
分享本页
返回顶部