JavaScript对象键值排序:代码输出与预期不符如何修正?
问题分析与解决方案
原代码存在两个核心问题:
- 排序逻辑错误:当前代码将每个键值对的键(
k)与自身的值(v)进行比较,这是无意义的逻辑,无法实现按值排序的目标。 - 未转换为对象:排序后仅得到了键值对数组,没有将其转换为最终的对象结构。
根据你给出的预期输出,最终对象的值是按字母升序排列的(dj < henry < jeff < ken),且键按Bong、Brad、rj、Robert的顺序排列。以下是实现该结果的代码:
const player = {"Bong":"henry","rj":"ken","Robert":"dj","Brad":"jeff"}; // 提取所有值并按字母升序排序 const sortedValues = Object.values(player).sort(); // 定义你期望的键顺序 const desiredKeys = ['Bong', 'Brad', 'rj', 'Robert']; // 将排序后的值与指定键对应,构建新对象 const sortedPlayer = Object.fromEntries( desiredKeys.map((key, index) => [key, sortedValues[index]]) ); console.log(sortedPlayer); // 输出结果:{"Bong":"dj","Brad":"henry","rj":"jeff","Robert":"ken"}
补充:如果需求是按值排序键值对(保留原键值对应关系)
如果你的真实需求是让键值对按值的字母顺序排序(而非重新分配值),可以使用以下代码,此时键会保留与原值的对应关系:
const player = {"Bong":"henry","rj":"ken","Robert":"dj","Brad":"jeff"}; // 按值的字母顺序排序键值对,再转换为对象 const sortedPlayer = Object.fromEntries( Object.entries(player).sort(([,v1], [,v2]) => v1.localeCompare(v2)) ); console.log(sortedPlayer); // 输出结果:{"Robert":"dj","Bong":"henry","Brad":"jeff","rj":"ken"}
内容的提问来源于stack exchange,提问作者Scaplog
相关产品推荐
相关产品推荐

