Как мне получить доступ к глубокому значению, используя одну переменную в скобках? - PullRequest
1 голос
/ 21 января 2012

Мне интересно, как сделать следующее - у меня есть следующие данные:

dta = {
       "fielddata": {
           "text1": "4B030C2E-3D53-4DF8-A3535EF377B45DE5",
           "text2": "Unlabeled"
       }
}

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

var result = dta["fielddata"]["text1"];

нет проблем там, иЯ могу использовать переменные вроде

var val1 = "fielddata",
    val2 = "text1",
    acc = dta[val1][val2];

log(acc);

снова, потрясающе, но как насчет того, когда у меня есть только одна переменная, содержащая точечную нотацию?

var val = "fielddata.text1",
    acc = dta[val];
log(acc);

Это приведет к неопределенности.Есть мысли о том, как это сделать?

Большое спасибо!Marco

Ответы [ 3 ]

5 голосов
/ 21 января 2012
var val = "fielddata.text1",
    acc = dta,               // reference the base object
    parts = val.split('.'),  // split the val into an Array of individual parts
    i;

  // Iterate the parts, updating acc each time
for( i = 0; i < parts.length; i++ )
    acc = acc[parts[i]];
2 голосов
/ 21 января 2012

Другой вариант - JSONPath .Для относительно простых случаев использования, это, вероятно, лучшее решение, но с большей сложностью, я мог бы использовать что-то более формализованное.*

0 голосов
/ 18 мая 2014

геттер

exports.getDeep = function(field, object){
  var parts = field.split('.');
  var value = object;
  // Iterate the parts, updating value each time
  for( var i = 0; i < parts.length; i++ ){
      value = value[parts[i]];
      if(i==parts.length-1){
        return JSON.parse(JSON.stringify(value))
      }
  }
}

сеттер

exports.setDeep = function(field, object, newvalue){
  var parts = field.split('.');
  for( var i = 0; i < parts.length; i++ ){
      if(i==parts.length-1){
        object[parts[i]] = newvalue
        return object
      }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...