JavaScript中一個對象數組按照另一個數組排序


JavaScript中一個對象數組按照另一個數組排序

需求:排序

  1. const arr1 = [33, 11, 55, 22, 66];
  2. const arr2 = [{age: 55}, {age: 22}, {age: 11}, {age: 66}, {age: 33}]
  3. 數組arr2中每項都是一個對象,對象中age屬性 === 數組arr1中的項
  4. 將arr2數組根據對象的age值在arr1中的位置排序, 排序后的結果為 `const arr2 = [ {age: 33},{age: 11}, {age: 55}, {age: 22}, {age: 66}]

步驟:

  • 方法1(需求已知根據對象的age排序)

     const arr1 = [33, 11, 55, 22, 66]; 
     const arr2 = [{age: 55}, {age: 22}, {age: 11}, {age: 66}, {age: 33}]
     
     console.log('排序前arr2 => ', arr2) 
    
     // 排序 arr2
     arr2.sort((prev, next) => {
       const p = arr1.indexOf(prev.age)
       const n = arr1.indexOf(next.age)
       return p - n
     })
    
     // 排序 arr2(簡寫)
     arr2.sort((prev, next) => {
       return arr1.indexOf(prev.age) - arr1.indexOf(next.age)
     })
    
     console.log('排序后arr2 => ', arr2)
     console.log('     arr1 => ', arr1)
    

  • 方法2 (需求未知需要根據對象的哪個屬性排序)

      const ageArr = [33, 11, 55, 22, 66]; 
      const moneyArr = [5000, 3000, 6000, 2000, 9000]
      const objArr = [
          {age: 55, money: 6000},
          {age: 22, money: 3000},
          {age: 11, money: 2000},
          {age: 66, money: 9000},
          {age: 33, money: 5000}
      ]
      
    // 1. 將sort排序函數抽離出來
       /**
        * @description 數組sort方法的 sortby(規定排序順序)
        * @param {String} propName 屬性名(數組排序基於的屬性)
        * @param {Array} referArr 參照數組(objArr數組排序的參照數組)
        */
       const sortFunc = (propName, referArr) => {
         return (prev, next) => {
           return referArr.indexOf(prev[propName]) - referArr.indexOf(next[propName])
         }
       }
       
    // 2. 排序objArr
       objArr.sort(sortFunc('age', ageArr))
       console.log('按age屬性排序后的objArr\n', objArr)
       
       objArr.sort(sortFunc('money', moneyArr))
       console.log('按money屬性排序后的objArr\n', objArr)
    


免責聲明!

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



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