2020-07-28
描述
在不修改的情况下,将一个对象中的键值对进行转换。转换后的值和每一个将要被转换的键相对应,他们是值相同的所有键组成的一个数组。如果提供了函数,则将该函数应用于每一个被转换了的键上。
提示
- 使用
Object.keys()
和Array.prototype.reduce()
来转换一个对象中的键值对 - 如果提供了函数的话,则进行调用
- 第二个参数
fn
为可选值,应用于每一个被转换的键。默认为不运行。
代码
const invertKeyValues = (obj, fn) =>
Object.keys(obj).reduce((acc, key) => {
const val = fn ? fn(obj[key]) : obj[key];
acc[val] = acc[val] || [];
acc[val].push(key);
return acc;
}, {});
示例
将下列对象的键值进行调换:
invertKeyValues({ a: 1, b: 2, c: 1 }); // { 1: ["a", "c"], 2: ["b"] }
invertKeyValues({ a: 1, b: 2, c: 1 }, value => 'group' + value); // { group1: ["a", "c"], group2: ["b"] }