2013-01-17 9 views
5

私は2つのパスの違いを取得しようとしています。私は解決策を持って来ましたが、それがうまくいても、それについて本当に幸せではありません。これを行うより良い/簡単な方法がありますか?2つのパス間のNodejsの差

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

答えて

14

ノードは、まさにこれを行い、また、あなたが遭遇するかもしれない様々な相対パスエッジ例すべてを扱う標準関数、path.relativeを、提供

path.relative(from, to)

fromからtoへの相対パスを解決します。

例:

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

私は前にそれを見ていたし、いくつかの理由で、それは適切ではないと思いました。しかし、それはです。ありがとう – romainberger

0

これが機能する場合があります。 それは、どちらが他のもののサブセットであるかを知っていることに頼っていますが、ケースは同じであると仮定します。

online docsから:

var diff = secondPath.substring(firstPath.length); 
関連する問題