12

私は2つのパスの違いを取得しようとしています。私は解決策を思いついたが、それがうまくいったとしても、私はそれについて本当に満足していない。これを行うためのより良い/より簡単な方法はありますか?

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

2 に答える 2

27

Nodeは、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'
于 2013-01-18T00:11:06.717 に答える
-1

これはうまくいくかもしれません。どちらが他方のサブセットであるかを認識しているという事実に依存していますが、ケースは同じであると想定しています。

var diff = secondPath.substring(firstPath.length);
于 2013-01-18T00:04:04.890 に答える