反转对象
在不改变对象的情况下,反转对象的键值对。
- 使用
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' ] }