JavaScript中一個對象數組按照另一個數組排序
需求:排序
const arr1 = [33, 11, 55, 22, 66];
const arr2 = [{age: 55}, {age: 22}, {age: 11}, {age: 66}, {age: 33}]
- 數組arr2中每項都是一個對象,對象中age屬性 === 數組arr1中的項
- 將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)