从数组中删除重复条目,并在javascript中按顺序排列

removing duplicate entries from an array and arranging in order in javascript

本文关键字:javascript 并在 顺序 排列 删除 数组      更新时间:2023-09-26

我想删除数组中的所有重复项,并按从大到小的顺序排列

["57358e5dbd2f8b960aecfa8c",
"573163a52abda310151e5791",
"573163a52abda310151e5791",
"573163a52abda310151e5791",
"573163a52abda310151e5791",
"573163da2abda310151e5792",
"57358e5dbd2f8b960aecfa8c",
"57358e5dbd2f8b960aecfa8c"
"573163da2abda310151e5792",]

我想要这个

["573163a52abda310151e5791",
 "57358e5dbd2f8b960aecfa8c",
 "573163da2abda310151e5792"]

第一个出现次数最多,第二个出现次数最少,第三个只出现一次

当然有一百万种不同的方法,但一种相当简单的方法是首先统计不同项目的出现次数,然后根据这些值对唯一值进行排序:

var input = [
    "57358e5dbd2f8b960aecfa8c",
    "573163a52abda310151e5791",
    "573163a52abda310151e5791",
    "573163a52abda310151e5791",
    "573163a52abda310151e5791",
    "573163da2abda310151e5792",
    "57358e5dbd2f8b960aecfa8c",
    "57358e5dbd2f8b960aecfa8c",
    "573163da2abda310151e5792"
];
var count = {};
input.forEach(function(item) {
    if(count.hasOwnProperty(item)) count[item]++;
    else count[item] = 1;
});
var output = Object.keys(count).sort(function(left, right) {
   if(count[left] < count[right]) return 1;
   if(count[left] > count[right]) return -1;
   return 0;
});

您可以创建一个键值对数组(key,occurrences),如下所示:

var arr = [];
for (var i = 0; i < myArray.length; i++) {
    if (arr.indexOf(myArray[i]) > -1) {
        // It occured before, search the key-value pair
        // and increment the occurance
        arr.indexOf(myArray[i])[1]++;
    } else {
        // Add to our array
        arr.push({myArray[i], 1});
    }
}
function compare(a, b) {
    if (a[1] < b[1]) return -1;
    else if (a[1] > b[1]) return 1;
    else return 0;
}
arr.sort(compare);

这样,你就可以完全控制你的排序算法,并有确切的出现次数作为额外的奖励!希望这能有所帮助。

相关文章: