鍍金池/ 問(wèn)答/HTML/ js變量和字符串拼接之后,怎么還能是變量呢?

js變量和字符串拼接之后,怎么還能是變量呢?

受別人指點(diǎn),修改了問(wèn)題,之前發(fā)錯(cuò)了問(wèn)題又沒(méi)有表達(dá)清楚,代碼如下。冒號(hào)左邊可以[result${i}AV]這樣寫,數(shù)字由索引獲取,但是冒號(hào)右邊的不知道怎么寫,拼接之后就不是變量了。冒號(hào)左邊的是page函數(shù)的data初始化數(shù)據(jù)里面的,冒號(hào)右邊是let result1A = [1,2,3]這種寫在onload函數(shù)里面的,需要把計(jì)算之后把值傳給page函數(shù)的初始化數(shù)據(jù)data里面對(duì)應(yīng)的數(shù)據(jù),該末尾加了V(view)。目前很想知道怎么使用遍歷寫出更精簡(jiǎn)的代碼,因?yàn)槊疤?hào)右邊不會(huì)拼接。

this.setData({
      labelAV: labelA,
      result1AV: result1A,
      result2AV: result2A,
      result3AV: result3A,
      result4AV: result4A,
      result5AV: result5A,
      result6AV: result6A,
      result7AV: result7A,
      result8AV: result8A,
      result9AV: result9A
    })
回答
編輯回答
冷溫柔

問(wèn)題描述有點(diǎn)亂,我理解你的問(wèn)題大概是這個(gè)意思:
你需要寫一段類似這樣的代碼:

this.setData({
  labelAV: labelA,
  result1AV: result1A,
  result2AV: result2A,
  result3AV: result3A,
  result4AV: result4A,
  result5AV: result5A,
  result6AV: result6A,
  result7AV: result7A,
  result8AV: result8A,
  result9AV: result9A
})

但是對(duì)象很長(zhǎng),并且鍵名和對(duì)應(yīng)的變量名都有規(guī)律,所以想問(wèn)問(wèn)有什么簡(jiǎn)單的方法?

其實(shí)有辦法的,但是我們一般不會(huì)這樣寫。
可以用eval來(lái)實(shí)現(xiàn):

const codes = [ `labelAV: labelA` ];
for ( let i = 0; i < 10; i++ ) {
    codes.push( `result${i}AV: result${i}A` );
}
eval( `this.setData( { ${codes.join( ',' )} } )` );

但是建議不要這樣寫代碼,也不要定義一堆resultxA之類的變量,你可以用一個(gè)數(shù)組來(lái)保存它們,這樣就會(huì)好處理很多

2017年11月22日 00:04
編輯回答
替身
for(i=1;i<10;i++)
  resultA.push(this.data['result'+i+'AV'])
2018年5月10日 17:27
編輯回答
網(wǎng)妓
let resultA = Array(10).fill(0).map((_, i) => this.data[`result${i}AV`])
2018年5月17日 08:14