2016-05-22 10 views
2

У меня есть литерал объекта, который выглядит, как показано нижеJavascript использовать относительный струнный путь, чтобы пройти еще один строку пути

var object = { 
    child:[{ 
     actualChild:'valueIwantToGet' 
     medical:{ 
      contact:'where i am starting my relative path' 
     } 
    }] 
} 

Мой вопрос, как я могу изменить абсолютную строку пути с строки относительного пути, чтобы получить новый путь, где «^» будет один уровень выше (родителя)

var absolutePath = 'object.child.0.medical.contact'; 
var relativePath = '^.^.actualChild'; 

//The String i am trying to get 
'object.child.0.actualChild' 

Я полагаю, что мне нужно разбить строку на «» затем подсчитайте, сколько «^» есть, а затем «поп», что много шагов от конца абсолютного пути, но я не уверен в оптимальном способе сделать это, не записывая большую рекурсивную функцию.

ответ

1

С вашего пути на самом деле просто строки с разделителем ., я бы оперировал их как таковые e. г. с помощью регулярных выражений:

function realPath(path) { 
    var result = path; 
    while ((path = path.replace(/[^\.]*\.\^\./g, '')) !== result) result = path; 
    return result; 
} 

Пример:

realPath('object.child.0.medical.contact.^.^.actualChild'); 

Результат:

"object.child.0.actualChild" 
+0

Это потрясающе! благодаря –