如何有条件地向对象添加属性

时间:2019-12-16 13:34:10

标签: javascript

我已经读过此In Javascript, how to conditionally add a member to an object?,但就我而言,它不起作用。

我有以下情况:

angular.forEach(vm.someData.entities, entity => {
  ...(entity.type === "section" && { entity.styleFormats = entity[`${vm.activeTab}StyleFormats`]});
  entity.content = entity[`${vm.activeTab}Content`];
  entity.stateClasses = determinateStateClasses(false);
  entity.isNew = false;
});

spread运算符给我一个解析错误。

1 个答案:

答案 0 :(得分:0)

不要在此处使用传播运算符。在构造对象文字时会使用该运算符,这不是您在此处所做的。您只是在函数中编写一行代码。

也许可以使用&&短路来执行预期的操作:

entity.type === "section" && entity.styleFormats = entity[`${vm.activeTab}StyleFormats`];

但这还不清楚。通常,在确定值时会使用这种短路,而不是在执行操作时使用。从结构上看,这类似于使用条件运算符(?:)与使用if块之间的区别。前者不能替代后者,它们有自己的用途。

在这种情况下,您要做的是有条件地在函数中执行操作。这正是if块的确切含义:

if (entity.type === "section") {
    entity.styleFormats = entity[`${vm.activeTab}StyleFormats`];
}

基本上,不要尝试编写最聪明的代码,而要编写最清晰的代码。没有理由避免使用if块。