美文网首页
解决JavaScript中数组排序sort后不发生改变

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

作者: WarMj | 来源:发表于2020-05-02 11:35 被阅读0次

背景

最近在做一个项目,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]);
    }
}

浅拷贝、深拷贝与赋值

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

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

解决方案

既然知道了原理,这里的需求是需要全部改变,所以我们可以采用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是可以将多个待处理对象合并成一个目标类型的对象。

相关文章

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

    背景 最近在做一个项目,Ajax从后台返回数据后,前端用js处理时,发现无论如何使用sort排序,最终要么是没改变...

  • Array方法

    sort() sort() 对数组成员进行排序,默认是按照字典顺序排序。排序后,原数组将被改变。如果想让sort方...

  • JavaScript 中的数组去重和排序

    排序 Sort方法 在JavaScript中,数组Array本身有具有Sort方法可以对数组的元素进行排序,并返回...

  • 数组方法 sort() 排序错乱问题

    一、问题 在JavaScript中,数组使用sort()后发现有排序不正确的情况,如下: 二、原因 其实,sort...

  • 数组的操作方法简介

    一、排序方法 reverse():倒序 改变数组本身,返回值也是改变后的数组 sort():重排序 改变数组本身,...

  • 记JavaScript中的一些小坑

    1. 数字数组排序 JavaScript中的sort()默认是字母排序的,例如[1,2,10,5].sort() ...

  • JS练习2:数组(牛客)

    1 sort()方法 Array.sort()方法将数组中的元素排序并返回排序后的数组。当不带参数调用sort()...

  • sort原理

    sort()对数组进行排序,原数组改变 sort()方法没有参数时,按照ascii码对元素进行排序 sort()方...

  • 数组排序之优雅的compare函数

    JavaScript数组排序,默认支持两种:sort()排序和reverse()逆序。 reverse() rev...

  • 几个有用的 JavaScript 技巧

    1.对数字数组进行排序 JavaScript 数组有内置的 sort 方法。默认情况下 sort 方法把数组元素转...

网友评论

      本文标题:解决JavaScript中数组排序sort后不发生改变

      本文链接:https://www.haomeiwen.com/subject/lsfkghtx.html