sort()排序以及多个属性数组对象排序(按条件排序)
原生排序
javascript
let arr = [5, 2, 1, 4, 9, 8]
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length - 1; j++) {
if (arr[j] > arr[j + 1]) {
let num = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = num
}
}
}
console.log(arr)
ES6排序
sort() 方法是最强大的数组方法之一。 默认排序顺序为按字母升序。 使用数字排序,你必须通过一个函数作为参数来调用。 比较函数两个参数a和b,a-b 升序,返回b-a 降序 注意: 这种方法会改变原始数组!
javascript
let arr = [5, 2, 1, 4, 9, 8]
// 升序
arr.sort(function (a, b) {
return a - b
})
console.log(arr)
// 结果 1,2,4,5,8,9
// 降序
arr.sort(function (a, b) {
return b - a
})
console.log(arr)
// 结果 9,8,5,4,2,1
根据数组中的某个属性排序
javascript
let arr_choice = [{ id: 1 }, { id: 3 }, { id: 2 }, { id: 8 }, { id: 6 }, { id: 4 }]
// 升序
arr_choice.sort(function (a, b) {
return b.id - a.id
})
console.log(arr_choice)
// 结果:[{"id":1},{"id":2},{"id":3},{"id":4},{"id":6},{"id":8}]
// 降序
arr_choice.sort(function (a, b) {
return b.id - a.id
})
console.log(arr_choice)
// 结果:[{"id":8},{"id":6},{"id":4},{"id":3},{"id":2},{"id":1}]
根据多个属性排序
javascript
let arr_multi = [{ id: 1, age: 10 }, { id: 3, age: 5 }, { id: 2, age: 6 }, { id: 8, age: 8 }, { id: 6, age: 5 }, { id: 4, age: 5 }]
// 升序
arr_multi.sort(function (a, b) {
// 默认根据年龄排序,年龄相同则按照id排序
if (a.age == b.age) {
return a.id - b.id
}
return a.age - b.age
})
console.log(arr_multi)
// 结果:[{"id":3,"age":5},{"id":4,"age":5},{"id":6,"age":5},{"id":2,"age":6},{"id":8,"age":8},{"id":1,"age":10}]
// 降序
arr_multi.sort(function (a, b) {
// 默认根据年龄排序,相同则按照id排序
if (a.age == b.age) {
return b.id - a.id
}
return b.age - a.age
})
console.log(arr_multi)
// 结果:[{"id":1,"age":10},{"id":8,"age":8},{"id":2,"age":6},{"id":6,"age":5},{"id":4,"age":5},{"id":3,"age":5}]
sort
排序若碰到排序值为undefined
的情况下,sort
会终止处理,此时我们需要做排序的兼容,考虑各种可能会发生的情况
javascript
let a = [
{ id: 0, label: '000' },
{ id: 2, label: '222' },
{ label: '333' },
{ label: '444' },
{ id: 1, label: '111' }
]
a.sort((a, b) => {
// 判断排序的对象是否存在,普通判断中,数字0 会隐式转换为false,这里需要做兼容
// a和b都是undefined则相等
if ((a.id != 0 && !a.id) && (b.id != 0 && !b.id)) return 0
// a.id不是0 且 a.id是undefined则a被排在b之后
if (a.id != 0 && !a.id) return 1
// b.id不是0 且 b.id是undefined则b被排在a之后
if (b.id != 0 && !b.id) return -1
return a.id - b.id
})
console.log(a)