Javascript 按值对对象数组进行排序
我正在尝试对一组对象进行排序,这是一个巨大的数组 我创建了以下函数。我有一个比较函数,如下所示:Javascript 按值对对象数组进行排序,javascript,Javascript,我正在尝试对一组对象进行排序,这是一个巨大的数组 我创建了以下函数。我有一个比较函数,如下所示: WordCounter.prototype.compare = function(a, b) { if (Object.values(a) < Object.values(b)) { return -1; } if (Object.values(a) > Object.values(b)) { return 1; } r
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;
};
[{unpleasant: 50}, {sneak: 13}, {marched: 12}, {flaming: 2}, {tongues: 1}]
然后我使用下面的函数对数组进行迭代,它确实对对象进行了一点排序,但似乎是分块进行的:
WordCounter.prototype.returnWords = function(array) {
for (var key in array) {
return array[key];
}
};
以下是一些虚拟数据供参考,但实际上阵列中有数千个对象:
[{tongues: 1}, {unpleasant: 50}, {sneak: 13}, {marched: 12}, {flaming: 2}]
我需要这样分类:
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;
};
[{unpleasant: 50}, {sneak: 13}, {marched: 12}, {flaming: 2}, {tongues: 1}]
你知道为什么它只排序一点点,而不是整个哈希数组吗?你可以使用一个助手函数
getValue
从一个对象中获取一个值,假设它只有一个属性,然后按该属性排序:
函数getValue(obj){
for(让key输入obj)返回obj[key];//返回在对象中找到的任何值
}
//样本数据
var arr=[{舌头:1},{不愉快:50},{偷偷摸摸:13},{游行:12},{火焰:2}];
//分类
arr.sort((a,b)=>getValue(b)-getValue(a));
控制台日志(arr)代码>
.as控制台包装{max height:100%!important;top:0;}
返回for循环内部是个坏主意:它会立即停止for循环。请提供一些示例数据和所需输出。哦,是的,谢谢!-将其更改为console.log for now还Object.values(a)
看起来可疑:values
返回一个数组。。。你认为比较与数组有什么关系?嗯,我明白了,我正试图根据每个函数中的值对数组进行排序。你知道当这些键的名称都不同时,我如何访问它们吗?@Freddy你想根据哪个对象属性对数组排序?您能提供阵列中两个对象的示例吗?非常有效。非常感谢。简明,clever@trincot,您知道吗,第一个键的访问速度更快,Object.keys
,for in
或迭代器?在这种特殊情况下,这没有多大关系,因为对象预期只有一个可枚举的自有属性(而没有继承的属性),但如果一个对象有多个可枚举的,自己的属性,for..in
(或使用迭代器的任何其他方式)将快得多<代码>对象。键必须检索所有属性,而只需要一个属性。