gpt4 book ai didi

javascript - 从可能包含函数的对象中获取扁平键

转载 作者:行者123 更新时间:2023-12-01 00:28:55 25 4
gpt4 key购买 nike

例如,这是我发现的使按键变平的功能

    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<string, any> | 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 < string, any > | 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);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>

关于javascript - 从可能包含函数的对象中获取扁平键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58746506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com