gpt4 book ai didi

javascript - 是否可以进行有条件的解构或有后备?

转载 作者:行者123 更新时间:2023-12-05 00:31:02 25 4
gpt4 key购买 nike

我有一个具有许多深层嵌套属性的对象。我希望能够访问“MY_KEY”(如下)上的属性,但如果不存在则获取“MY_OTHER_KEY”。我怎样才能做到这一点?

const {
X: {
Y: {
MY_KEY: {
Values: segments = []
} = {}
} = {}
} = {}
} = segment;

最佳答案

您可以使用解构赋值中的时间变量来实现这一点,如下所示:

function destructure(segments) {
const {
X: {
Y: {
MY_OTHER_KEY: _fallback_value = {},
MY_KEY: {
Values: segment = []
} = _fallback_value,
} = {},
} = {},
} = segments;

return segment;
}

console.log(destructure({})); // []
console.log(destructure({X:{}})); // []
console.log(destructure({X:{Y:{MY_KEY:{Values:"A"}}}})); // A
console.log(destructure({X:{Y:{MY_OTHER_KEY:{Values:"B"}}}})); // B
console.log(destructure({X:{Y:{MY_OTHER_KEY:{Values:"C"}, MY_KEY:{Values:"D"}}}})); // D


首先,这种解构会一直尝试提取第二个键,这可能会产生一些意想不到的影响,例如 MY_OTHER_KEY 的属性 getter 。将永远运行。

然而我看不到它的美。在解构中隐藏一些控制流只是令人困惑。我宁愿建议提取父对象并对其使用常规属性访问:

function destructure(segments) {
const {
X: {
Y: nested = {},
} = {},
} = segments;
const selected = nested.MY_KEY || nested.MY_OTHER_KEY || {};
const {
Values: segment = []
} = selected;
return segment;
}

console.log(destructure({})); // []
console.log(destructure({X:{}})); // []
console.log(destructure({X:{Y:{MY_KEY:{Values:"A"}}}})); // A
console.log(destructure({X:{Y:{MY_OTHER_KEY:{Values:"B"}}}})); // B
console.log(destructure({X:{Y:{MY_OTHER_KEY:{Values:"C"}, MY_KEY:{Values:"D"}}}})); // D

关于javascript - 是否可以进行有条件的解构或有后备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46816095/

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