首页 > 解决方案 > 按数组中指定的键名对对象进行排序

问题描述

我有一个带有简单键值对的对象和一个只有键名的数组。我想按数组中键的顺序对对象键进行排序。

一个简化的例子:

const obj = {
"bread": 11,
"butter": 6,
"milk": 40,
}

const orderedKeys = ["milk", "butter", "bread"]

const expectedResult = {
"milk": 40,
"butter": 6,
"bread": 11,
}

在这个例子中,我知道数组和对象中键的数量,但实际上我不知道数量,实际上对象也可以有比数组中指定的键更多的键。在这种情况下,我只想要对象末尾的未知键。

解决这个问题的最干净的方法是什么?

标签: javascript

解决方案


您可以利用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);


推荐阅读