对一个数组按照值出现的次数从大到小进行排序

2022-01-24

业务中碰到这样的场景,有一个数组,里面数据项目很多,现在需要去重,然后按照数组项出现的重复次数从大到小或者从小到大进行排序。目前想到2中方法,在这里记录一下,方法如下:

假设数组是这样的:

let arr = [“人事类”,”行政类”,”运营类”,”行政类”,”行政类”,”人事类”]

方法一:

function processArr(arr) {
// 1. 把相同的项目合并起来,并记录出现的次数
let obj = {}
let result = []
for (let i = 0; i < arr.length; i++) {
if(!obj[arr[i]]) {
obj[arr[i]] = 1
} else {
obj[arr[i]] = Number(obj[arr[i]]) + 1
}
}
// console.log(obj) // {人事类: 2, 行政类: 3, 运营类: 1}

// 2. 转化为一个json数据格式的数组
for (let j in obj) {
result.push({name: j, count: obj[j]})
}

return result
}

方法二:

function processArr(arr) {
function processArr(arr) {
let setArr = […new Set(arr)]
let result = []
for(let i = 0; i < setArr.length; i++) {
let count = 0
for(let j = 0; j < arr.length; j++) {
if(setArr[i] == arr[j]) {
count++
result[i] = {
name: setArr[i],
count: count
}
}
}
}
return result
}

这两种方法都可以处理出如下数据:

[{
“name”: “人事类”,
“count”: 2
},{
“name”: “行政类”,
“count”: 3
},{
“name”: “运营类”,
“count”: 1
}]

接下来就是按照出现次数进行排序,对一个json数据格式的数组,按照属性名排序:

function compare(property) {
return function (a, b) {
var value1 = a[property];
var value2 = b[property];
return value2 – value1;  // 从大到小
}
}

最后,使用processArr(arr).sort(compare(‘count’))即可按照出现次数从大到小排列了。

发表评论

邮箱地址不会被公开。 必填项已用*标注