javascript - 如果键的值未定义,如何不以对象文字表示法设置键

标签 javascript functional-programming ecmascript-6 redux

我正在使用 Redux 创建一个 RPG Angular 色生成器。在我的 reducer 中,我希望能够修改齿轮并跟踪这些修改。修改可以有评级,但不一定必须有评级。

因此,如果评级未定义,我宁愿不记录它。那么,如果值未定义,有没有办法不在对象文字表示法中添加键?

gearName 将是要修改的齿轮的字符串。

mod 是一个对象,其中包含有关 mod 的属性,例如+评级防火或其他。

评级是一个数字,表示修改的值。

const purchaseGear = (state, action) => {
  const { gearName, mod, rating } = action.parameter;

  switch (action.type) {
    case MOD_GEAR:
      return {
        ...state,
        [gearName]: {
          ...state[gearName],
          mods: {
            ...state[gearName].mods,
            [mod.name]: {
              ...mod,
              rating
            }
          },
          cost: mod.cost * (rating || 1)
        }
    }
} 

最佳答案

Axel Rauschmayer on 2ality.com提出以下模式:

const cond = false;
const obj = {
    ...(cond ? {a: 1} : {}),
    b: 2,
};
    // {b: 2}

所以在你的情况下它会是这样的

...(rating !== undefined ? {rating: rating} : {})

请记住,此模式仅在引擎已支持 Object rest/spread-proposal 时才有效。 。它可以在 Chrome v58 中运行,但我尚未在其他平台上进行测试。

关于javascript - 如果键的值未定义,如何不以对象文字表示法设置键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43906214/

相关文章:

javascript - 如何在带有语法提示的语音合成中插入停顿

javascript - 使用 vuetify.js 创建表和子表——不知道从哪里开始

javascript - 隐藏 select 的 optgroups 及其内容,除了被选中的那个

functional-programming - Dart 是否支持函数式编程?

functional-programming - 为什么 Elixir 不使用多方法/协议(protocol)?

javascript - 如何编写验证函数

javascript - 输入的每个更改都作为数据单独存储(例如 : "t", "te"、 "tes"、 "test"而不是只有 "test")

scala - 在 Scala 中表达有状态过滤器的功能方法

javascript - 将字符串参数转换为一个元素的数组

Javascript - 为数组中的每个 javascript 对象添加一个基于另一个现有键/值的新键/值