@@ -51,34 +51,45 @@ var diff = function(xs, ys){
5151 return printDiff ( matrix , xs , ys , xs . size || 0 , ys . size || 0 ) ;
5252} ;
5353
54- var printDiff = function ( matrix , xs , ys , i , j ) {
55- if ( i === 0 && j === 0 ) { return [ ] ; }
56- if ( i > 0 && j > 0 && Immutable . is ( xs . get ( i - 1 ) , ys . get ( j - 1 ) ) ) {
57- return printDiff ( matrix , xs , ys , i - 1 , j - 1 ) . concat ( new DiffResult ( {
58- op : '=' ,
59- val : xs . get ( i - 1 )
60- } ) ) ;
61- }
62- else if ( i > 0 && j > 0 && i === j && ! Immutable . is ( xs . get ( i - 1 ) , ys . get ( j - 1 ) ) ) {
63- return printDiff ( matrix , xs , ys , i - 1 , j - 1 ) . concat ( new ReplaceResult ( {
64- val : xs . get ( i - 1 ) ,
65- newVal : ys . get ( i - 1 )
66- } ) ) ;
67- }
68- else {
69- if ( j > 0 && ( i === 0 || matrix [ i ] [ j - 1 ] >= matrix [ i - 1 ] [ j ] ) ) {
70- return printDiff ( matrix , xs , ys , i , j - 1 ) . concat ( new DiffResult ( {
71- op : '+' ,
72- val : ys . get ( j - 1 )
54+ var printDiff = function ( matrix , xs , ys , xSize , ySize ) {
55+ var diffArray = [ ] ;
56+ var i = xSize - 1 ;
57+ var j = ySize - 1 ;
58+ while ( i >= 0 || j >= 0 ) {
59+ if ( i >= 0 && j >= 0 && Immutable . is ( xs . get ( i ) , ys . get ( j ) ) ) {
60+ diffArray . push ( new DiffResult ( {
61+ op : '=' ,
62+ val : xs . get ( i )
7363 } ) ) ;
64+ i -= 1 ;
65+ j -= 1 ;
7466 }
75- else if ( i > 0 && ( j === 0 || matrix [ i ] [ j - 1 ] < matrix [ i - 1 ] [ j ] ) ) {
76- return printDiff ( matrix , xs , ys , i - 1 , j ) . concat ( new DiffResult ( {
77- op : '-' ,
78- val : xs . get ( i - 1 )
67+ else if ( i >= 0 && j >= 0 && i === j && ! Immutable . is ( xs . get ( i ) , ys . get ( j ) ) ) {
68+ diffArray . push ( new ReplaceResult ( {
69+ val : xs . get ( i ) ,
70+ newVal : ys . get ( i )
7971 } ) ) ;
72+ i -= 1 ;
73+ j -= 1 ;
74+ }
75+ else {
76+ if ( j >= 0 && ( i === - 1 || matrix [ i + 1 ] [ j ] >= matrix [ i ] [ j + 1 ] ) ) {
77+ diffArray . push ( new DiffResult ( {
78+ op : '+' ,
79+ val : ys . get ( j )
80+ } ) ) ;
81+ j -= 1 ;
82+ }
83+ else if ( i >= 0 && ( j === - 1 || matrix [ i + 1 ] [ j ] < matrix [ i ] [ j + 1 ] ) ) {
84+ diffArray . push ( new DiffResult ( {
85+ op : '-' ,
86+ val : xs . get ( i )
87+ } ) ) ;
88+ i -= 1 ;
89+ }
8090 }
8191 }
92+ return diffArray . reverse ( ) ;
8293} ;
8394
8495/**
0 commit comments