我正在尝试对一个巨大的对象数组进行排序。
我创建了以下函数。我有一个如下所示的比较函数:
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}]
知道为什么它只排序一点点而不是整个哈希数组吗?
最佳答案
您可以使用辅助函数 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; }
关于javascript - 按值对对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44488117/