gpt4 book ai didi

javascript - 使用默认值解构嵌套对象的更简洁方法?

转载 作者:行者123 更新时间:2023-12-03 01:30:39 25 4
gpt4 key购买 nike

我有一个嵌套对象,可能缺少一些东西:

const unreliableObject = {
id: 10,
nestedObject: { // may be missing
id: 11 // may also be missing
}
}

现在说我想获取内部 id。我可以执行以下操作

const { nestedObject: { id: key = -1 } = {key: -1} } = unreliableObject;
console.log(key);

还有更好的办法吗?我没有定义 {key: -1} 两次,也没有使用空对象(我们有 lint 规则),并且在这种情况下我仍然想使用默认键。

最佳答案

如果您愿意接受类似于 Lodash's get 的路径符号并使用代理对象,然后您可以将 p['x.y.z'] 转换为安全的 p.x.y.z 操作:

const {'x.y.z': a = 42} = path({});
const {'x.y.z': b = 42} = path({x: {}});
const {'x.y.z': c = 42} = path({x: {z: {}}});
const {'x.y.z': d = 42} = path({x: {y: {z: 999}}});

console.log(a, b, c, d);
<script>
const path = obj =>
new Proxy(obj, {
get(o, k) {
const [head, ...tail] = k.split('.');
return tail.length === 0 ?
o[head] :
path(o[head] != null ? o[head] : {})[tail.join('.')];
}
});
</script>

<小时/>

如果您愿意不使用解构并接受更多的代理魔法,那么我们可以做其他疯狂的事情,例如将属性转换为函数!

const p = path(/* some object */);
p.x.y.z(42);
// either the value at 'x.y.z' or 42

const a = path({});
const b = path({x: {}});
const c = path({x: {z: {}}});
const d = path({x: {y: {z: 999}}});

console.log(a.x.y.z(42),
b.x.y.z(42),
c.x.y.z(42),
d.x.y.z(42));
<script>
const path = obj =>
new Proxy(obj, {
get: (o, k) =>
o[k] == null
? path(x => x)
: typeof o[k] === 'object'
? path(o[k])
: () => o[k] });
</script>

<小时/>

这可能是过度设计的,但我还是想玩弄代理;)也许这会有所帮助。

关于javascript - 使用默认值解构嵌套对象的更简洁方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54441385/

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