【问题标题】:Setting variables based off an object根据对象设置变量
【发布时间】:2020-07-23 07:02:00
【问题描述】:

我有一个可以包含多种属性的对象,例如

{a: 1}, {b: 4}, {c: 2}, {a: 3, b: 1}

它将是一个键,旁边有一个计数值。

我想根据对象中的键名设置一堆变量,例如:

aOnly = {a: 1}, mixOfAB = {a: 3, b: 1}

我在一个最终会返回一个字符串值的函数中使用这个逻辑。对这个对象进行操作的最佳方法是什么,我尝试使用开关,但效果不佳。我可以使用大量的 if/else 语句,但有没有更简洁的语句?

【问题讨论】:

  • 您几乎肯定不想设置一堆变量(必须在运行时计算),因为您稍后将无法在代码中轻松引用它们,因为不知道哪个存在的。您能否再描述一下这里的目标是什么?
  • 此代码将在一个函数中,该函数将返回一个字符串返回到它被调用的位置。我可以通过使用大量 if/else 条件检查对象的每个属性来使其工作,只是想知道是否有更智能/更有效的方法。
  • 会返回什么字符串?你能举一些输入 => 期望输出的例子吗?
  • 第一行代码中的输入对象示例。输出将作为第 2 行,但为了更清楚起见,如果对象只包含上面代码中的键 'a','aOnly' 的值才会为 true。

标签: javascript function ecmascript-6 switch-statement


【解决方案1】:

你可以这样做:

vars = {}

function setVariable(obj) {
    keys = Object.keys(obj)
    name = keys.length == 1 ? keys[0] + 'Only' : 'mixOf' + keys.join('').toUpperCase()
    vars[name] = obj
}

setVariable({a: 1})
console.log(vars)

setVariable({b: 4})
console.log(vars)

setVariable({c: 2})
console.log(vars)

setVariable({a: 3, b: 1})
console.log(vars)

【讨论】:

  • 它不是一个对象数组——它将是一个具有 1 个或多个键的对象。根据存在的键,我会设置一个特定的值。
  • 我更新了答案以反映我认为您所描述的内容。输入是您的示例对象数组,但我们单独作用于每个对象并为其生成 var。
  • 再一次,没有数组 - 任何地方。我在之前的评论中说过,它只是一个对象。
  • 您能否从您的问题描述中阐明单个对象是什么? {a: 1}, {b: 4}, {c: 2}, {a: 3, b: 1} 看起来像一个样本对象数组,但我似乎误解了你的意图。答案试图提供一种为您问题中的每个样本生成所需变量的方法。
  • 我已更新答案以删除对列表的引用,只需调用 setVariable 方法以避免混淆列表的用途。
猜你喜欢
  • 1970-01-01
  • 2017-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-08
  • 1970-01-01
相关资源
最近更新 更多