Javascript - назначение динамических значений без eval () - PullRequest
2 голосов
/ 05 марта 2011

Итак, мне нужно передать 3 переменные:

  1. статистика (объект JSON, показан ниже)
  2. place_type (строка "США" или "Штат")
  3. коэффициент (строка)

У меня есть другая переменная, answer , значение которой зависит от других переменных. Например, если place_type = "State" и factor = "factor2", тогда

var answer = stats.State.factor2; // equals "E"

Я пытаюсь выяснить, есть ли способ динамического присвоения переменной без необходимости использовать eval ().

// Simplified, there are many more than 3 factors
var stats = {
    "US": {
        "factor1" : "A",
        "factor2" : "B",
        "factor3" : "C"
    },
    "State": {
        "factor1" : "D",
        "factor2" : "E",
        "factor3" : "F"
    }
}

Используя eval (), вот как это делается:

eval("var answer = stats." + place_type + "." + factor + ";");

Возможно ли это в JS без необходимости использования eval () или множества различных циклов IF? Заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 05 марта 2011

Вот, пожалуйста,

var answer = stats[place_type][factor];

Демонстрационная версия: http://jsfiddle.net/simevidas/NsT8Y/


Подумайте над тем, чтобы поместить это в блок try-catch, так как свойство цепочкиаксессоры.Если свойство place_type не существует в stats, то stats[place_type] вернет undefined, а undefined[factor] выдаст ошибку.

var answer;

try { 
    answer = stats[place_type][factor];
} catch(e) {}
2 голосов
/ 05 марта 2011

Для этого примера это просто.Эквивалентный

var answer = stats.State.factor2;

эквивалентен

var answer = stats["State"]["factor2"];

, и последний синтаксис будет работать с переменной на месте:

var answer = stats[place_type][factor];
1 голос
/ 05 марта 2011
var answer = stats[place_type][factor];
...