您好,登錄后才能下訂單哦!
最近在做一個項目,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不發生改變的詳細內容,更多請關注億速云其它相關文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。