首頁 >web前端 >js教程 >解決JavaScript中數組排序sort不發生改變

解決JavaScript中數組排序sort不發生改變

hzc
hzc轉載
2020-06-15 09:28:163468瀏覽

解決JavaScript中數組排序sort不發生改變

最近在做一個項目,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是可以將多個待處理物件合併成一個目標類型的物件。 ######推薦教學:《###JS教學###》###

以上是解決JavaScript中數組排序sort不發生改變的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:juejin.cn。如有侵權,請聯絡admin@php.cn刪除