2013-01-17 13 views
5

Próbuję uzyskać różnicę między dwie ścieżki. Przyszedłem z rozwiązaniem, ale nie jestem z niego zadowolony, nawet jeśli działa. Czy istnieje lepszy/łatwiejszy sposób na zrobienie tego?Nodejs różnica między dwie ścieżki

var firstPath = '/my/first/path' 
    , secondPath = '/my/first/path/but/longer' 

// what I want to get is: '/but/longer' 

// my code: 
var firstPathDeconstruct = firstPath.split(path.sep) 
    , secondPathDeconstruct = secondPath.split(path.sep) 
    , diff = [] 

secondPathDeconstruct.forEach(function(chunk) { 
    if (firstPathDeconstruct.indexOf(chunk) < 0) { 
    diff.push(chunk) 
    } 
}) 

console.log(diff) 
// output ['but', 'longer'] 

Odpowiedz

14

Węzeł zapewnia standardową funkcję, path.relative, który robi dokładnie to, a także obsługuje wszystkich różnych względnych przypadkach krawędzi ścieżki, które mogą wystąpić:

Z online docs:

path.relative(from, to)

Rozwiąż ścieżkę względną od from do to.

Przykłady:

path.relative('C:\\orandea\\test\\aaa', 'C:\\orandea\\impl\\bbb') 
// returns 
'..\\..\\impl\\bbb' 

path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb') 
// returns 
'../../impl/bbb' 
+0

Wziąłem spojrzeć na niego przed i za jakiś powód, że to nie było właściwe. Ale to jest. Dzięki – romainberger

0

To może działać. Chociaż opiera się na fakcie, że wie, który z nich jest podzbiorem drugiego, i zakłada, że ​​sprawa będzie taka sama.

var diff = secondPath.substring(firstPath.length); 
Powiązane problemy