50 lines
1.3 KiB
JavaScript
50 lines
1.3 KiB
JavaScript
(function (factory) {
|
|
typeof define === 'function' && define.amd ? define(factory) :
|
|
factory();
|
|
}(function () { 'use strict';
|
|
|
|
/**
|
|
* Returns an array containing the initial elements which both input arrays have in common.
|
|
*
|
|
* A common use-case for this is discovering common ancestors between two file paths.
|
|
*
|
|
* ```js
|
|
* > commonSequence = require("common-sequence");
|
|
*
|
|
* > pathA = "/Users/lloyd/Documents/75lb/dmd".split("/");
|
|
* > pathB = "/Users/lloyd/Documents/75lb/array-tools".split("/");
|
|
*
|
|
* > commonSequence(pathA, pathB).join("/");
|
|
* '/Users/lloyd/Documents/75lb'
|
|
* ```
|
|
*
|
|
* or a more trivial example:
|
|
* ```js
|
|
* > a.commonSequence([ 1, 2, 3 ], [ 1, 2, 4 ])
|
|
* [ 1, 2 ]
|
|
* ```
|
|
* @module common-sequence
|
|
*/
|
|
module.exports = commonSequence;
|
|
|
|
/**
|
|
* Returns the initial elements which both input arrays have in common
|
|
* @param {Array} - first array to compare
|
|
* @param {Array} - second array to compare
|
|
* @returns {Array}
|
|
* @alias module:common-sequence
|
|
*/
|
|
function commonSequence (a, b) {
|
|
var result = [];
|
|
for (var i = 0; i < Math.min(a.length, b.length); i++) {
|
|
if (a[i] === b[i]) {
|
|
result.push(a[i]);
|
|
} else {
|
|
break
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
}));
|