作者:黄霖hy | 来源:互联网 | 2023-09-23 17:18
例如,这是我发现的用于平键的功能
const keys = flattenKeys({a: { b: 1,c: 1}});
返回
{ 'a.b': 1,'a.c': 1 }
但是对于此输入
const keys = flattenKeys({a: { b: 1,c: () => {}}});
它给了我
{ 'a.b': 1 }
我们可以看到a.c
丢失了
export const flattenKeys = (obj: Record | any[],path: string[] = []) =>
!isObject(obj) ? { [path.join('.')]: obj } : reduce(obj,(cum,next,key) => merge(cum,flattenKeys(next,[...path,key])),{});
我试图添加!isObject(obj) && isFunction(obj) ...
,但似乎不起作用
预期输出:
{
'a.b': 1,'a.c': () => {}
}
@编辑:
isObject,reduce,merge来自lodash
包
将!isObject(obj) ?
更改为!isPlainObject(obj) ?
以仅排除普通对象:
const flattenKeys = (obj: Record | any[],path: string[] = []) =>
!_.isPlainObject(obj) ? {
[path.join('.')]: obj
} : _.reduce(obj,(cum,next,key) => _.merge(cum,flattenKeys(next,[...path,key])),{});
const keys = flattenKeys({
a: {
b: 1,c: () => {}
}
});
console.log(keys);