【问题标题】:Assign value to variable from object array with template literals?使用模板文字从对象数组中为变量赋值?
【发布时间】:2021-06-29 20:26:32
【问题描述】:

我正在尝试根据对象数组值将数据动态分配给变量。 我将介绍一个简化的数据结构:

const data = [{"age":25,"name":"Michael"},{"age":20,"name":"Lara"}]
const data2 = [{"age":26,"name":"Sarah"},{"age":21,"name":"David"}]

我想给变量赋值。例如,我知道这是可行的:

const arr = 'data'
const zero = '0'
const a = 'age'
const test = `${data[zero][a]}`
console.log(test) // returns 25

但是我可以动态分配它吗(可能是嵌套的模板文字)?

const test = `${arr[zero][a]}`
console.log(test) // does not work, because arr is a string

const test = `${${arr}[zero][a]}`
console.log(test) // does not work

有什么方法可以实现吗? 提前谢谢!

编辑:
我过度考虑了解决方案(试图使用模板文字)。
为了解决这个问题,感谢ggorlen 的输入,我改变了我的数据存储方式。这样,动态访问数据就更容易了。该解决方案与Sowmen Rahman 的答案非常相似。

我太努力想以特定方式解决问题,而另一种方法更明智!

【问题讨论】:

  • 欢迎来到 SO!如果您尝试将字符串arr = 'data' 视为变量名,则可以使用this[arr],但使用字符串数据作为变量名is generally not a good pattern。你really trying to accomplish 这些阴谋诡计是什么?感谢您的澄清。
  • 我正在遍历数据数组,我需要根据变量从数组中提取值。然后将这些值分配给一个新变量。我会检查那个链接,谢谢!
  • 我明白了,谢谢。然后一般的解决方案是使用二维数组。而不是datadata1data2、...data4532data4533 作为单独的松散变量(基本上是this 上的键),使用data = [[{"age":25,"name":"Michael"},{"age":20,"name":"Lara"}], [{"age":26,"name":"Sarah"},{"age":21,"name":"David"}]]。然后你可以遍历data 并使用data[i][j] 访问ith 内部数组上的元素j。首先,您如何获得单独的 data 变量?尽可能将事物打包到数据结构中,以便轻松操作它们。
  • 感谢您的帮助。你是对的,我改变了我的数据的存储方式并解决了它。当没有必要时,我会去做一些过于复杂的事情。
  • 很高兴听到。您可能想发布self answer 描述问题所在以及您如何解决它,然后接受它,以帮助未来与您有相同情况的访问者。当前接受的答案并没有真正触及问题的核心。

标签: javascript arrays javascript-objects template-literals


【解决方案1】:

按照您建议的方式,这样的事情是不可能的。字符串本身不能动态转换为变量名,但是如果您将变量存储在字典或映射对象中,则可以使用下标运算符[] 来完成任务。

const data = [{"age":25,"name":"Michael"},{"age":20,"name":"Lara"}]
const data2 = [{"age":26,"name":"Sarah"},{"age":21,"name":"David"}]

const rootObject = {
  data: data,
  data2: data2
}

const arr = 'data'
const zero = '0'
const a = 'age'
const test = `${rootObject[arr][zero][a]}` 
console.log(test) // outputs 25

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多