在Javascript中将变量名转换为字符串

Convert variable name to string in Javascript?

本文关键字:转换 字符串 变量名 Javascript      更新时间:2023-09-26

我在Stack Overflow上看到过一些关于这个的帖子,但答案似乎总是用键/值对创建一个对象。这似乎不是我目前所需要的。我想做的是:我有不同的数组,可能包含一个用户名。我想检查每个数组,看看用户名是否作为一个值存在于其中。如果是,我想要数组变量的名称的字符串表示形式。例子:

var array = ['apple', 'orange', 'grape'];
var array2 = ['apple', 'pear', 'plumb']
member_arrays = new Array();
// I'd like this block to be dynamic in that i don't have to specify the array name 
// in the inArray or member_arrays[member_arrays.length+1] (just loop through my arrays
// and add a string representation of the array name to the member_arrays array)
if ($.inArray( 'apple', array ) != -1)
  member_arrays[member_arrays.length] = 'array';
if ($.inArray( 'apple', array2) != -1)
  member_arrays[member_arrays.length] = 'array2';
// etc...

在JavaScript中不能这样做。这就是为什么人们建议使用对象并将"变量"作为对象的属性。

顺便说一下,当你对数组进行追加操作时,你只需要长度,而不是length + 1:

member_arrays[member_arrays.length] = 'array';

数组是从零开始的,所以"下一个"槽位总是"length"的值。

编辑本;好吧,有一种情况你可以这样做:当你的变量是全局的。任何名为"x"的全局变量也可以作为"window"的属性来引用(对于web浏览器中的代码):

var x = 3;
alert(window['x']); // alerts "3"

请避免使用全局变量:-)

我不确定您为什么要这样做,但是先把它放在一边,这里有一种接近您似乎正在寻找的方法。它确实像其他人建议的那样使用对象,但最终得到的是包含通过测试的候选数组名称的"答案数组"。

您在示例中确实使用了jQuery,所以我也这样做了。但是你也可以用同样的方式使用纯JavaScript .indexOf()

var candidates = {
  'array' : ['apple', 'orange', 'grape'],
  'array2' : ['apple', 'pear', 'plumb']
};
var member_arrays = [];
for( var test in candidates ){
  if( $.inArray( 'apple', candidates[test] ) !== -1 ){ // could use .indexOf()
    member_arrays.push( test ); // use push; no need to specify an index
  }
}
console.log( member_arrays ); // -> ["array","array2"]