gpt4 book ai didi

javascript - 在对象字面量内使用带有三元运算符的扩展语法

转载 作者:行者123 更新时间:2023-11-28 11:43:09 24 4
gpt4 key购买 nike

考虑以下代码,其中一个对象由两部分组成:值及其相应的描述:

let flagConfigObj = {};

const features = {
f1: {
value: 1,
type: 'type1'
},
f2: {
value: 2,
type: 'type2'
}
};

let featuresDescription = {
f1: {
description: 'desc 1'
},
f2: {
description: 'desc 2'
}
};

Object.keys(features).forEach(key => {
flagConfigObj[key] = {
...features[key],
...(featuresDescription[key] || { some: 'backup' })
};
});

console.log(flagConfigObj);

正如您可能注意到的,构造复合 Material 时,有 || 运算符防止表单传播不存在的对象并将其替换为一些默认模板。因此,此代码的输出将是:

{ 
f1: { value: 1, type: 'type1', description: 'desc 1' },
f2: { value: 2, type: 'type2', description: 'desc 2' }
}

但是当featuresDescription中相应的描述字段丢失时,它会被替换为:

{ 
f1: { value: 1, type: 'type1', description: 'desc 1' },
f2: { value: 2, type: 'type2', some: 'backup' }
}

问题

如何用三元运算符 ?: 替换 || 语法?我尝试过一些有趣的组合,例如

featuresDescription[key] ? ...featuresDescription[key] : {some: 'backup'}
{featuresDescription[key]} ? ...featuresDescription[key] : {some: 'backup'}

但是它们都给出了语法错误,我现在感觉只是盲目地随机化 [,],},{,... 的位置,而不是真正理解它......

一如既往地感谢任何帮助!

最佳答案

扩展语法是对象初始化语法的一部分,但不是通用表达式语法的一部分,所以你的整个? : 必须位于右侧:

 ... featuresDescription[key] ? featuresDescription[key] : { some: "backup" }

在这种特殊情况下,这与简单的 || 原始版本之间没有任何有效的区别。表达式

expr1 ? expr1 : expr2

表示“如果 expr1 计算结果为“真”值,则使用它的值;否则使用 expr2 的值”。这和什么完全一样

expr1 || expr2

的意思是。 (好吧,忽略 expr1 可能的副作用,这将是使用更简单的 || 形式的更强烈的动机,除非你为 future 埋下陷阱程序员。)

关于javascript - 在对象字面量内使用带有三元运算符的扩展语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60309975/

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