我需要将变量计算为对象名称,然后检索对象中特定名称的值。
对象:
var priority = [{
dSubDue: '1,D',
dMS2date: "1.5,'M'",
dMS3date: '3,M',
dMS4date: '30,D',
dMS5date: '1,M',
dNotErFac: '2,W',
dDOverview: 'N/A',
dPreACMResp: '2,W',
dACMdate: '2,W',
dMS6date: '2,W',
dMS7date: '1,M',
dM86date: '1.5M'
}];
其中对象的名称是优先级。
当另一个变量cellval设置为与对象相同的名称" priority"我需要使用以下cellval[0]['dMS2date']
访问实际优先级对象中的键值。
如果我使用eval(cellval[0]['dMS2date'])
,则会返回正确的值,但如果可能,我不想使用eval。
任何想法?并且在管理员将此标记为重复之前,这并不是指使用硬编码变量名称作为所使用的示例,并且没有示例在问题的上下文中起作用。它与键和值无关,它的对象名称和动态访问它而不是硬编码。
答案 0 :(得分:0)
如果我理解正确,你就会有3个对象,priority1
,priority2
和priority3
,而你cellval
会保留你所对象的名称你希望得到它的价值。
没有直接的方法,但考虑到这样的选项将是有限的和预定义的,你可以创建一个hashMap并使用它们来获取值。
这种方法的另一个好处是阅读。只需查看hashMap,就可以了解可能的选项及其相关对象。
var priority1 = [{ dSubDue: '1,D', dMS2date: "1.5,'M'", dMS3date: '3,M', dMS4date: '30,D', dMS5date: '1,M', dNotErFac: '2,W', dDOverview: 'N/A', dPreACMResp: '2,W', dACMdate: '2,W', dMS6date: '2,W', dMS7date: '1,M', dM86date: '1.5M'}];
var priority2 = [{ dSubDue: '1,D', dMS2date: "1.4,'M'", dMS3date: '3,M', dMS4date: '30,D', dMS5date: '1,M', dNotErFac: '2,W', dDOverview: 'N/A', dPreACMResp: '2,W', dACMdate: '2,W', dMS6date: '2,W', dMS7date: '1,M', dM86date: '1.5M'}];
var priority3 = [{ dSubDue: '1,D', dMS2date: "1.3,'M'", dMS3date: '3,M', dMS4date: '30,D', dMS5date: '1,M', dNotErFac: '2,W', dDOverview: 'N/A', dPreACMResp: '2,W', dACMdate: '2,W', dMS6date: '2,W', dMS7date: '1,M', dM86date: '1.5M'}];
var hashMap = {
priority1: priority1,
priority2: priority2,
priority3: priority3,
}
var cellval = 'priority1';
console.log(hashMap[cellval][0].dMS2date);
cellval = 'priority2';
console.log(hashMap[cellval][0].dMS2date);
cellval = 'priority3';
console.log(hashMap[cellval][0].dMS2date);