通过变量中的值集动态访问对象

时间:2017-11-07 05:28:25

标签: javascript jquery

我需要将变量计算为对象名称,然后检索对象中特定名称的值。

对象:

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。

任何想法?并且在管理员将此标记为重复之前,这并不是指使用硬编码变量名称作为所使用的示例,并且没有示例在问题的上下文中起作用。它与键和值无关,它的对象名称和动态访问它而不是硬编码。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你就会有3个对象,priority1priority2priority3,而你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);