JavaScript 中的动态变量名称

问题描述 投票:0回答:1

我正在尝试执行一个循环函数,从数组中获取歌词。我确实有一个工作函数,但没有动态变量。我想要的只是在某种程度上动态变量名称。在数组项中,有从“ve1”到“ve20”的值。 所以我需要像下面所示的那样得到这个 ve[i],但它没有按预期工作。

function testingLyrics(){
  for (let i = 0; i < allMusic[indexNumb - 1].lyrics.length; i++) {
    if(allMusic[indexNumb - 1].lyrics.ve[i].stamp){

      /* Action */

  }}
}

数组看起来像这样

var allMusic = [
    {
    lyrics:{
      ve1:{
        ls: "The club isn't the best place to find a lover",
      },
      ve2:{
        ls: "So the bar is where I go",
      },
      ve3:{
        ls: "Me and my friends at the table doing shots",
      },
     },
    },
    {
    lyrics:{
      ve1:{
        ls: "I've been fuckin' hoes and poppin' pillies",
      },
      ve2:{
        ls: "Man, I feel just like a rockstar (ayy, ayy)",
      },
      ve3:{
        ls: "All my brothers got that gas",
      },
     },
    },
]
javascript arrays function variables
1个回答
0
投票

您似乎想使用 ve[i] 表示法动态访问歌词对象的属性。但是,在 JavaScript 中,您无法使用点符号来访问具有动态键的属性。

您应该使用方括号表示法。以下是如何修改函数来实现此目的:

function testingLyrics() {
  for (let i = 1; i <= allMusic[indexNumb - 1].lyrics.length; i++) {
    const currentVerse = allMusic[indexNumb - 1].lyrics['ve' + i];
    if (currentVerse && currentVerse.stamp) {
      /* Action */
      console.log(currentVerse.ls); // Example action: log the lyrics
    }
  }
}

这样,您可以使用方括号表示法动态访问 ve[i] 属性。

注意:我将循环条件调整为从 1 开始,因为你的诗句被命名为 ve1、ve2 等。如果你的诗句从 0 开始,你可以保持原始代码中的循环条件。

© www.soinside.com 2019 - 2024. All rights reserved.