我试图对一组对象进行排序,这是巨大的。
我创建了以下功能。我有一个比较函数,如下所示:
WordCounter.prototype.compare = function(a, b) {
if (Object.values(a) < Object.values(b)) {
return -1;
}
if (Object.values(a) > Object.values(b)) {
return 1;
}
return 0;
};
然后我在这个函数中引用它:
WordCounter.prototype.sortArray = function(array) {
this.sortedArray = array.sort(this.compare);
};
然后我使用下面的函数迭代数组,它会对对象进行一些排序,但它似乎是以块的形式进行的:
WordCounter.prototype.returnWords = function(array) {
for (var key in array) {
return array[key];
}
};
以下是一些虚拟数据供参考,但实际上数组中有数千个对象:
[{tongues: 1}, {unpleasant: 50}, {sneak: 13}, {marched: 12}, {flaming: 2}]
我需要这样排序:
[{unpleasant: 50}, {sneak: 13}, {marched: 12}, {flaming: 2}, {tongues: 1}]
任何想法为什么它只是排序一点而不是整个哈希数组?
答案 0 :(得分:2)
您可以使用辅助函数getValue
从对象获取值,假设它只有一个属性,并按此排序:
function getValue(obj) {
for (let key in obj) return obj[key]; // return any value found in the object
}
// Sample data
var arr = [{tongues: 1}, {unpleasant: 50}, {sneak: 13}, {marched: 12}, {flaming: 2}];
// Sort it
arr.sort((a, b) => getValue(b) - getValue(a));
console.log(arr);
.as-console-wrapper { max-height: 100% !important; top: 0; }