最近在做一個項目,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]); } }
淺拷貝、深拷貝與賦值
這三個的區別無法就是改變資料的時候,是如何改變,為了簡單明了,用一張表最快理解:
#是否指向同一物件 | |||
原資料中包含子物件 | |||
#是 | 會使原始資料一同改變 | 會使原始資料一同改變 | |
否 | 不會使原始資料一同改變 | 會使原始資料一同改變 |
#不會使原始資料一同改變
不會讓原始資料一同改變
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);
以上是解決JavaScript中數組排序sort不發生改變的詳細內容。更多資訊請關注PHP中文網其他相關文章!