mirror of
				https://github.com/flynx/diff.js.git
				synced 2025-10-31 20:10:09 +00:00 
			
		
		
		
	more refactoring and testing...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									e2fe2a1e55
								
							
						
					
					
						commit
						b6f7bc369d
					
				
							
								
								
									
										26
									
								
								diff.js
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								diff.js
									
									
									
									
									
								
							| @ -48,19 +48,35 @@ var DIFF_TYPES = new Set([ | |||||||
| //---------------------------------------------------------------------
 | //---------------------------------------------------------------------
 | ||||||
| // Helpers...
 | // Helpers...
 | ||||||
| 
 | 
 | ||||||
|  | // 	zip(array, array, ...)
 | ||||||
|  | // 		-> [[item, item, ...], ...]
 | ||||||
|  | //
 | ||||||
|  | // 	zip(func, array, array, ...)
 | ||||||
|  | // 		-> [func(i, [item, item, ...]), ...]
 | ||||||
|  | //
 | ||||||
| var zip = function(func, ...arrays){ | var zip = function(func, ...arrays){ | ||||||
| 	var i = arrays[0] instanceof Array ? 0 : arrays.shift() | 	var i = arrays[0] instanceof Array ? 0 : arrays.shift() | ||||||
| 	var s = new Array(arrays.length) | 	if(func instanceof Array){ | ||||||
| 	arrays | 		arrays.splice(0, 0, func) | ||||||
| 		.forEach(function(a, j){  | 		func = null | ||||||
|  | 	} | ||||||
|  | 	// build the zip item...
 | ||||||
|  | 	// NOTE: this is done this way to preserve array sparseness...
 | ||||||
|  | 	var s = arrays | ||||||
|  | 		.reduce(function(res, a, j){ | ||||||
| 			a.length > i  | 			a.length > i  | ||||||
| 				&& (s[j] = a[i]) }) | 				&& (res[j] = a[i]) | ||||||
|  | 			return res | ||||||
|  | 		}, new Array(arrays.length)) | ||||||
| 	return arrays | 	return arrays | ||||||
| 			// check that at least one array is longer than i...
 | 			// check that at least one array is longer than i...
 | ||||||
| 			.reduce(function(res, a){  | 			.reduce(function(res, a){  | ||||||
| 				return Math.max(res, i, a.length) }, 0) > i ? | 				return Math.max(res, i, a.length) }, 0) > i ? | ||||||
| 		[func(i, s)] | 		// collect zip item...
 | ||||||
|  | 		[func ? func(i, s) : s] | ||||||
|  | 			// get next...
 | ||||||
| 			.concat(zip(func, i+1, ...arrays)) | 			.concat(zip(func, i+1, ...arrays)) | ||||||
|  | 		// done...
 | ||||||
| 		: [] } | 		: [] } | ||||||
| 
 | 
 | ||||||
| // XXX should we handle properties???
 | // XXX should we handle properties???
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user