最近在做一個項目,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);###語法:$.extend( target, [object1], [objectN] )其中, target為目標類型,這裡我用的是陣列[],還可以是{},可依實際情況處理。 從後面的[object1], [objectN]我們可以知道,extend是可以將多個待處理物件合併成一個目標類型的物件。 ######推薦教學:《###JS教學###》###
以上是解決JavaScript中數組排序sort不發生改變的詳細內容。更多資訊請關注PHP中文網其他相關文章!