从名称+变量开始编写数组的名称

时间:2016-11-28 09:12:22

标签: javascript jquery

我有这样的数组件打印出Good。

console.log(nameA_componentA['abc'].aaa);

但现在我想像这样打印出来

var ccc='componentA';
console.log(nameA_+ccc['abc'].aaa);

但不幸的是,它没有工作:( 我的错误在哪里?

3 个答案:

答案 0 :(得分:4)

虽然不推荐,但您可以在Javascript中执行此操作,而无需使用eval()。由于全局变量是window对象的后代,因此您可以像这样访问它们:

var ccc='componentA';
console.log(window['nameA_' + ccc]['abc'].aaa);

但使用对象/数组而不是使用此方法可能是更好的做法。

答案 1 :(得分:0)

您可以使用eval来处理此类情况。



var nameA_componentA = {
  abc: {
    aaa: 'Hello World'
  }
}

var ccc='componentA';
var obj = eval('nameA_'+ccc);
console.log(obj['abc'].aaa)
//console.log(nameA_+ccc['abc'].aaa);




注意:如果您可以选择重构代码以将所有此类对象包装在包装器对象中,则应该执行此操作。将eval视为最后的手段。



var nameA_componentA = {
  abc: {
    aaa: 'Hello World'
  }
}
var nameA_componentB = {
  abc: {
    aaa: 'Hello Foo'
  }
}

var wrapperObj = {
  nameA_componentA: nameA_componentA,
  nameA_componentB: nameA_componentB
}

var ccc='componentA';
var ccc1='componentB';
console.log( wrapperObj['nameA_'+ccc]['abc'].aaa);
console.log( wrapperObj['nameA_'+ccc1]['abc'].aaa);




参考

答案 2 :(得分:0)

您可以使用(window || context)['nameA_' + ccc].abc.aaa

const nameA_componentA = {
  abc: {
    aaa: 'Good'
  }
}
console.log(nameA_componentA['abc'].aaa);
const ccc='componentA';
// this isn't working in the stack snippets
// console.log(window['nameA_' + ccc]['abc'].aaa);

// you are better off namespacing
const nameA = {
  componentA: { abc: { aaa: 'Good' }},
  componentB: { abc: { aaa: 'Great' }}
}

console.log(nameA[ccc].abc.aaa)