Javascript 用另一个变量引用变量名,或从变量中确定变量名
我有一个函数,它迭代一些对象,然后我想使用被迭代对象的变量名。目前,我维护一个重复的名称列表,并通过数组索引引用它们。这似乎没有必要。整件事都在一个围栏里 原则上,我可以看到两种方法 一种是使用名称列表,并以某种方式引用命名为这样的变量,另一种是以某种方式从变量本身(保存在数组中)确定变量名 这是可能的,还是我应该考虑一种完全不同的方法Javascript 用另一个变量引用变量名,或从变量中确定变量名,javascript,Javascript,我有一个函数,它迭代一些对象,然后我想使用被迭代对象的变量名。目前,我维护一个重复的名称列表,并通过数组索引引用它们。这似乎没有必要。整件事都在一个围栏里 原则上,我可以看到两种方法 一种是使用名称列表,并以某种方式引用命名为这样的变量,另一种是以某种方式从变量本身(保存在数组中)确定变量名 这是可能的,还是我应该考虑一种完全不同的方法 (function(){ var a = {p:true,b:true}; var b = {em:true,i:true}; var c = {
(function(){
var a = {p:true,b:true};
var b = {em:true,i:true};
var c = {h1:true,strong:true};
var x = function(tagName){
var typedefnames = ["a","b","c"]
var typedefs = [a,b,c];
var types = {}
var i;
for( i=0; i<typedefs.length; i++ )
if( typedefs[i][ tagName ] )
types[ typedefnames[i] ] = true
else
types[ typedefnames[i] ] = false
return types;
}
console.log(x("p"))
// { a:true, b:false, c:false }
}())
(函数(){
var a={p:true,b:true};
var b={em:true,i:true};
var c={h1:true,strong:true};
var x=函数(标记名){
变量typedefnames=[“a”、“b”、“c”]
var typedefs=[a,b,c];
变量类型={}
var i;
对于(i=0;i如果你对物体有自由,你可以试试这个
(function(){
var a = {name: 'a', tags: {p: true, b: true}};
var b = {name: 'b', tags: {em: true, i: true}};
var c = {name: 'c', tags: {h1: true, strong: true}};
var x = function(tagName){
var typedefs = [a, b, c];
var types = {};
for(var i=0; i<typedefs.length; i++ ) {
if(typedefs[i].tags[tagName]) {
types[typedefs[i].name] = true;
}
else {
types[typedefs[i].name] = false;
}
//alternative way for setting true/false based on truthy value
//types[typedefs[i].name] = !!typedefs[i].tags[tagName];
}
return types;
}
console.log(x("p"))
// { a:true, b:false, c:false }
}())
(函数(){
var a={name:'a',标记:{p:true,b:true};
var b={name:'b',标记:{em:true,i:true};
var c={name:'c',标记:{h1:true,strong:true};
var x=函数(标记名){
var typedefs=[a,b,c];
变量类型={};
对于(var i=0;i您真的需要三个变量吗?我建议改用一个对象,它的键将扮演您当前变量名的角色:
(function(){
var obj = {
a : {p:true,b:true},
b : {em:true,i:true},
c : {h1:true,strong:true}
};
var x = function(tagName){
var types = {}
for(var key in obj) {
types[key] = obj[key].hasOwnProperty(tagName) && obj[key][tagName] === true;
}
return types;
}
console.log(x("p"));
}());
虽然对我来说并不完美(因为仍有少量重复),但我认为这可能是最干净的解决方案
(function(){
// leave these as they are as they can be used from many other parts of the code
var a = {p:true,b:true};
var b = {em:true,i:true};
var c = {h1:true,strong:true};
var x = function(tagName){
// define a single object with key/value pairs that can both be accessed
var typedefs = {a:a,b:b,c:c}
var types = {};
// iterate the type definitions, setting the value based on lookup of originals
for(var key in typedefs)
types[key] = !!typedefs[key][tagName];
// good to go!
return types;
}
console.log(x("p"));
// { a:true, b:false, c:false }
}());