Как я могу создавать переменные во время выполнения на основе имен, извлеченных из строки? - PullRequest
1 голос
/ 24 февраля 2010

Надеясь, что кто-то может помочь и надеется, что это возможно в JavaScript. У меня в основном есть следующая строка в формате:

А, В, С: D, Е, F

То, чего я пытаюсь добиться, - это способ сопряжения левой переменной JavaScript, слева от ":", со значениями правой стороны справа от ":"

Мне бы хотелось, чтобы были установлены следующие переменные, чтобы я мог использовать их в своем кодировании, например:

var A = D;
var B = E;
var C = F;

Затем я могу использовать значения A, B и C в качестве параметров для других функций JavaScript.

Я рассмотрел методы split и slice для этой манипуляции со строками, но не уверен, как связать левую сторону со значениями правой стороны.

Любая помощь будет отличной, спасибо!

Ответы [ 2 ]

5 голосов
/ 24 февраля 2010

С помощью этого метода (присоединение переменных к объекту) вы можете ссылаться на переменные в коде без оператора eval.

a = "A,B,C:D,E,F";
array = a.split(":"); //split on the colon, get two strings
lefts = array[0];
rights = array[1];

obj = {} //object to attach variables to.
for( var i = 0; i < lefts.length; i++ )
{
  obj[lefts[i]] = rights[i]; //set the member variables of obj
}

obj.A // D
obj.B // E
obj.C // F

Если вас волнует свойство впустую запятой, проверьте, не равняется ли запятая [i] запятая, прежде чем устанавливать объект.

0 голосов
/ 24 февраля 2010

Функция pairup здесь генерирует код для сопряжения. Вам нужно eval возвращенный код, чтобы фактически выполнить его.

<script>

function pairup(s) {
  s = s.split(":");
  var lhs = s[0].split(",");
  var rhs = s[1].split(",");
  var pairing = "";
  for (var i = 0; i < lhs.length; i++) {
    pairing += "var " + lhs[i] + " = " + rhs[i] + "; \n";
  }
  return pairing;
}

alert(pairup("A,B,C:D,E,F"));

</script>

Если у вас есть объекты, готовые связать значения переменных, вы можете сделать что-то вроде этого:

<script>

function pairup(s, oleft, oright) {
  s = s.split(":");
  var lhs = s[0].split(",");
  var rhs = s[1].split(",");
  for (var i = 0; i < lhs.length; i++) {
    oleft[lhs[i]] = oright[rhs[i]];
  }
}

oleft = {};
oright = { firstName: "F", lastName: "L" };
pairup("givenName,familyName:firstName,lastName", oleft, oright);
alert(oleft.givenName + ", " + oleft.familyName);

</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...