2013-01-17 18 views
5

Sto cercando di ottenere la differenza tra due percorsi. Sono venuto con una soluzione, ma non ne sono davvero felice, anche se funziona. C'è un modo migliore/più semplice per farlo?Differenza dei nodi tra due percorsi

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'] 

risposta

14

nodo fornisce una funzione standard, path.relative, che fa esattamente questo e gestisce anche tutti i vari relativi casi limite percorso che si possono incontrare:

Dal online docs:

path.relative(from, to)

Risolvere il percorso relativo da from a to.

Esempi:

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

ho preso un'occhiata prima e per qualche motivo ha pensato che non era appropriato. Ma è. Grazie – romainberger

0

Questo potrebbe funzionare. Anche se si basa sul fatto che sa quale di loro è un sottoinsieme dell'altro e presuppone che il caso sia lo stesso.

var diff = secondPath.substring(firstPath.length);