我有一个对象数组
[
{"X" : {
"price" : "5"
}
},
{"Y" : {
"price" : "3"
}
},
{"Y" : {
"price" : "3"
}
},
{"Z" : {
"price" : "4"
}
},
{"Q" : {
"price" : "2"
}
},
{"X" : {
"price" : "5"
}
},
{"Z" : {
"price" : "4"
}
},
{"X" : {
"price" : "5"
}
}
]
我希望对数组进行频率排序,使得结果格式为[对象:数量]
如何将数组转换为以下格式:
// [{key: x, count: 3, price: 5}},{key: y:, count: 2, price: 3}
[{x:3},{y:2},{z:2},{q:1}]
但我遇到的问题是,如果频率匹配,那么排序就必须检查对象的属性,即在这种情况下是价格,如果价格高于其他匹配元素,那么应该给予权重,因此在这种情况下,z的价格高于y,所以z应该优先考虑。
[{x:3},{z:2},{y:2},{q:1}]
这是我迄今为止尝试过的内容:
var a = ["x", "v"], b = ["x", "y"], c = ["d", "y"];
var d = a.concat(b, c);
function sortByFrequency(array) {
var frequency = {};
array.forEach(function(value) { frequency[value] = 0; });
var uniques = array.filter(function(value) {
return ++frequency[value] == 1;
});
return uniques.sort(function(a, b) {
return frequency[b] - frequency[a];
});
}
var frequency = sortByFrequency(d);
console.log(frequency);
.as-console-wrapper{min-height:100%}
回答后更新
我仍然不知道如何将数组转换为这种格式
var arr = [
{"key":"X",
"price" : "5",
"count" :"3"
}
,
{"key":"Y",
"price" : "3",
"count" :"2"
}
,
{"key":"Z",
"price" : "4",
"count" : "2"
}
];
var r = _.sortBy(_.sortBy(arr, 'price'), 'count');
console.log(JSON.stringify(r));
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js"></script>
现在它可以工作,但如何从数组中获取对象并使其符合此格式?