let tags = {
"01": {
contentID: [10, 20],
occurrences: 1
},
"02": {
contentID: [10, 20],
occurrences: 1
},
"04": {
contentID: [10, 20],
occurrences: 3
},
"05": {
contentID: [10, 20],
occurrences: 6
}
};
如何通过将出现次数作为基础来按降序对它进行排序,这是一个全局变量。因此,我想将其存储在另一个对象中,并以降序对其进行排序。
答案 0 :(得分:2)
您不能对对象进行排序,但是可以将其转换为值数组:
Object.values(tags).sort((a, b) => b.occurrences - a.occurrences)
结果将是:
[
{
contentID: [10, 20],
occurrences: 6
},
{
contentID: [10, 20],
occurrences: 3
},
{
contentID: [10, 20],
occurrences: 1
},
{
contentID: [10, 20],
occurrences: 1
}
]
但是,如果需要的话,也可以分别对它们进行排序:
Object.keys(tags).sort((a, b) => tags[b].occurrences - tags[a].occurrences)
您的结果将是一个数组['05', '04', '02', '01']
答案 1 :(得分:1)
请注意,javascript中的对象没有任何顺序感。
不过,您可以创建并排列以保存结果。
要按降序获取它,可以执行
Object.values(tags).sort((a,b) => b.occurrences - a.occurrences)
答案 2 :(得分:1)
将其视为数组的其他建议可能是合理的。即使有键排序规范,将Javascript对象也视为按顺序排序也不是一个好主意。但是,如果您希望将结果保持相同的格式,则可以这样做,并且仍然最终对键进行排序:
let tags = {"01": {"contentID": [10, 20], "occurrences": 1}, "02": {"contentID": [10, 20], "occurrences": 1}, "04": {"contentID": [10, 20], "occurrences": 3}, "05": {"contentID": [10, 20], "occurrences": 6}}
const sorted = Object.entries(tags).sort(([, {occurrences: a}], [, {occurrences: b}]) => b - a)
.reduce((a, [k, v]) => Object.assign(a, {[k]: v}), {})
console.log(sorted)
不过,我看不出这到底有什么用。唯一可以看到行为差异的地方是在其上使用诸如Object.keys
,Object.values
或Object.entries
之类的东西,再次创建数组。