javascript - 按数组中指定的键名对对象进行排序
问题描述
我有一个带有简单键值对的对象和一个只有键名的数组。我想按数组中键的顺序对对象键进行排序。
一个简化的例子:
const obj = {
"bread": 11,
"butter": 6,
"milk": 40,
}
const orderedKeys = ["milk", "butter", "bread"]
const expectedResult = {
"milk": 40,
"butter": 6,
"bread": 11,
}
在这个例子中,我知道数组和对象中键的数量,但实际上我不知道数量,实际上对象也可以有比数组中指定的键更多的键。在这种情况下,我只想要对象末尾的未知键。
解决这个问题的最干净的方法是什么?
解决方案
您可以利用Array.prototype.reduce
它允许对数组执行不同的操作并返回另一种对象或数组
const obj = {
"bread": 11,
"butter": 6,
"milk": 40,
}
const orderedKeys = ["milk", "butter", "bread"]
const expectedResult = orderedKeys.reduce((accumulator, current) => {
return {...accumulator, [current]: obj[current]};
}, {})
console.log(expectedResult);
如果要添加不存在orderedKey
但存在于内部的密钥,obj
您可以像这样执行它
const obj = {
"bread": 11,
"butter": 6,
"milk": 40,
"cheese": 5
}
const orderedKeys = ["milk", "butter", "bread"]
let expectedResult = orderedKeys.reduce((accumulator, current) => {
return {...accumulator, [current]: obj[current]};
}, {});
expectedResult = Object.assign({}, expectedResult, obj);
console.log(expectedResult);
推荐阅读
- html - 在视口中调整图像
- node.js - 使用 mongoose nodejs 在另一个集合 mongoDB 中填充集合
- docker - 带大使 API 网关的 Go 微服务
- sql - 数据库结构 - 通过外键和求和填充表
- python - 要求用户输入文件以使用 python 运行程序
- typescript - typescript 3.33的onClick问题并做出反应
- android - FirebaseUser currentUser 存在,在代码中,即使它是从 Firebase DB 中手动删除的
- api - 如何在 Spotify 中获取 Artist 的城市信息?
- android - Firebase 根本不工作,没有错误消息
- android - 注意:无法读取 [Ljava.lang.Object;@79d6c4df 的获取 kotlin 元数据