將Js數組對象中的某個屬性值升序排序,並指定數組中的某個對象移動到數組的最前面


需求整理:

  本篇文章主要實現的是將一個數組的中對象的屬性值通過升序的方式排序,然后能夠讓程序可以指定對應的數組對象移動到程序的最前面。

數組如下所示:

var arrayData= [{name: "夏明", Id:24}, {name: "小紅", Id: 25},{name: "大袁", Id: 22},{name: "大姚", Id: 23},{name: "小芳", Id: 18}];  

首先把數組中的Id值通過升序的方式排序:

//源數組
var arrayData= [{name: "夏明", Id:24}, {name: "小紅", Id: 25},{name: "大袁", Id: 22},{name: "大姚", Id: 23},{name: "小芳", Id: 18}];  

//重寫排序方法
var compare = function (attribute) {
   return function (obj1, obj2) {
   var val1 = obj1[attribute];
   var val2 = obj2[attribute];
   if (val1 < val2) {
    return -1;
   } else if (val1 > val2) {
    return 1;
   } else {
    return 0;
   }  
   } 
  } 
var newArrayData=arrayData.sort(compare('Id'));//通過Id排序完成后的數組
console.log(newArrayData);

排序完成后輸出的值:

[{ name: "大袁", Id: 22 },  { name: "大姚", Id: 23 }, { name: "夏明", Id: 24 },{ name: "小紅", Id: 25 }]

找到Id為23的對象,移動到數組的最前面去(注意Id值唯一):

實現原理:因為移除數組對象需要找到對應數組對象的下標索引才能進行移除,現在我們需要移除Id=23的對象,讓其排到最前面去(先找到對象下標,然后把給數組對象賦值給temporaryArry臨時數組,然后在通過下標移除newArrayData中的該對象值,最后將arrayData等於temporaryArry.concat(newArrayData)重新渲染數組數據)。

代碼實現:

//創建臨時數組
var  temporaryArry=[];

//找到數組中Id=23的下標索引(從0開始)
let currentIdx=newArrayData.findIndex(v=>v.Id==23);
console.log('Id=23的索引值為:',currentIdx);

//把Id=23的對象賦值給臨時數組
temporaryArry.push(newArrayData[currentIdx]);

//移除數組newArray中Id=23的對象
newArrayData.splice(currentIdx,1);//從start[一般為對象的索引]的位置開始向后刪除delCount個元素

console.log('移除后的數據',newArrayData);

//重新渲染數組
newArrayData=temporaryArry.concat(newArrayData);	

console.log(newArrayData);

輸出結果: 

[{ name: "大姚", Id: 23 }, { name: "小芳", Id: 18 }, { name: "大袁", Id: 22 }, { name: "夏明", Id: 24 },{ name: "小紅", Id: 25 }]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM