gpt4 book ai didi

javascript - 按值对对象的属性进行排序并保留值

转载 作者:行者123 更新时间:2023-11-30 07:31:32 25 4
gpt4 key购买 nike

我创建了一个包含重复数据的食物名称数组。通过使用:

listFoodnames.forEach(x => {
counts[x] = (counts[x] || 0) + 1;
});

我可以计算数组中每个项目存在的次数。

使用:

Object.keys(counts).sort((a, b) => counts[b]-counts[a])

我可以将项目的数量从大到小排序,但是,我丢失了我想保留的实际数量。

我该如何解决这个问题?

$('document').ready(function() {
var listFoodnames = ["Batteries", "Bread", "Milk", "Bread", "Milk", "Milk"]
var counts = {};

listFoodnames.forEach(x => {
counts[x] = (counts[x] || 0) + 1;
});

console.log(counts) //LOGS EACH ITEM AS PROPERTY AND OCCURRENCES AS VALUE

var sortedCounts = Object.keys(counts).sort((a, b) => counts[b]-counts[a])

console.log(sortedCounts) //LOSES VALUES
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

最佳答案

不幸的是,根据规范,不能保证对象属性是有序的。您可以尝试使用对象数组。

另请注意,当您将数组中的项目组合成单个对象时,reduceforEach 更合适。

const listFoodnames = ["Batteries", "Bread", "Milk", "Bread", "Milk", "Milk"];
const counts =
Object.values(
listFoodnames.reduce((a, foodName) => {
if (!a[foodName]) a[foodName] = { foodName, count: 0 };
a[foodName].count++;
return a;
}, {})
);
counts.sort((a, b) => a.count - b.count);
console.log(counts);

关于javascript - 按值对对象的属性进行排序并保留值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50807365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com