2020-07-06
描述
为对象的每一个键进行深度映射。
提示
- 创建一个和所提供对象有着相同值的对象
- 使用提供的函数为该对象中的每一个键进行运行,以便生成新的对应的键
- 使用
Object.keys(obj)
迭代对象中的所有键 - 使用
Array.prototype.reduce()
创建一个有着同样值且使用fn
对键进行映射后的新对象
代码
const deepMapKeys = (obj, fn) =>
Array.isArray(obj)
? obj.map(val => deepMapKeys(val, fn))
: typeof obj === 'object'
? Object.keys(obj).reduce((acc, current) => {
const key = fn(current);
const val = obj[current];
acc[key] =
val !== null && typeof val === 'object' ? deepMapKeys(val, fn) : val;
return acc;
}, {})
: obj;
示例
将所有键转换为大写:
const obj = {
foo: '1',
nested: {
child: {
withArray: [
{
grandChild: ['hello']
}
]
}
}
};
const upperKeysObj = deepMapKeys(obj, key => key.toUpperCase());
/*
{
"FOO":"1",
"NESTED":{
"CHILD":{
"WITHARRAY":[
{
"GRANDCHILD":[ 'hello' ]
}
]
}
}
}
*/