美文网首页
根据数组对象中的某个属性值排序

根据数组对象中的某个属性值排序

作者: fly简书 | 来源:发表于2020-09-07 11:14 被阅读0次

// 待处理数据
let arrData = [
{name: 'A4', num: '4'},
{name:'A2', num:'2'},
{name: 'A1', num: '1'},
{name: 'A3', num: '3'}
]

//单属性排序
// 创建动态排序函数,根据传递的值对对象进行排序:
function dataSort(property) {
let sortOrder = 1;
if(property[0] === "-") {
sortOrder = -1;
property = property.substr(1)
}
return function (a,b) {
// 下面一行代码对字符串和数字均有效
var result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0
return result * sortOrder
}
}

// 按照属性num给data排序
let sortedArr = arrData.sort(dataSort("num"))

//多属性排序
function dataSortMore() {
/*
* 保存arguments对象,因为它将被覆盖
* 注意arguments对象是一个类似数组的对象
* 由要排序的属性的名称组成
*/
let props = arguments
return function (obj1, obj2) {
let i = 0, result = 0, numberOfProperties = props.length
// 从0开始获取不同的结果,因为有多个属性需要比较
while(result === 0 && i < numberOfProperties) {
result = dataSort(props[i])(obj1, obj2)
i++
}
return result
}
}

// 按照属性name和 num给data排序
let sortedArr = arrData.sort(dataSortMore("name", "num"));

//es6
class MyArray extends Array {
sortBy(...args) {
return this.sort(dataSortMore.apply(null, args))
}
}

// 按照属性num给data排序
let sortedArr = MyArray.from(arrData).sortBy("num")

相关文章

网友评论

      本文标题:根据数组对象中的某个属性值排序

      本文链接:https://www.haomeiwen.com/subject/dnpkektx.html