您当前的位置:网站首页>JS>解决JavaScript中数组排序sort不发生改变 找JS教程就上ki4.cc (>^ω^<),JavaScript

解决JavaScript中数组排序sort不发生改变 找JS教程就上ki4.cc (>^ω^<),JavaScript

2020年06月16日 投稿作者: 围观人数:21

两行 Javascript 代码生成 UUID的方法 找JS教程就上ki4.cc (>^ω^<)

两行 Javascript 代码生成 UUID的方法

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

    var provinceConfirmedCount = data;
    var provinceDeadCount = data;
    var provinceCuredCount = data;

    provinceConfirmedCount.sort(sortBy(("provinceConfirmedCount")));
    provinceDeadCount.sort(sortBy(("provinceDeadCount")));
    provinceCuredCount.sort(sortBy(("provinceCuredCount")));

    console.log(provinceConfirmedCount); //不生效
    console.log(provinceDeadCount); //不生效
    console.log(provinceCuredCount); //生效

//比较数组对象
function sortBy(field) {
    return function(a,b) {
        return parseInt(b[field]) - parseInt(a[field]);
    }
}

浅拷贝、深拷贝与赋值

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

async/await的来龙去脉 找JS教程就上ki4.cc (>^ω^<)

async/await的来龙去脉


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

解决方案

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

    var provinceConfirmedCount = $.extend([], data);
    var provinceDeadCount = $.extend([], data);;
    var provinceCuredCount = $.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是可以将多个待处理对象合并成一个目标类型的对象。

推荐教程:《JS教程》

以上就是解决JavaScript中数组排序sort不发生改变的详细内容,更多请关注ki4导航其它相关文章!

怎么解决javascript数字计算丢失精度问题? 找JS教程就上ki4.cc (>^ω^<)

计算机世界里,数字的计算,所有语言都会丢失精度,所以没有万全之策,但在人力范围内,尽量解决。下面本篇文章就来解决一下js数字计算丢失精度问题解决方案。

标签

版权说明
免责声明:本文文章内容由ki4导航网发布,但不代表本站的观点和立场,具体内容可自行甄别.