60 lines
1.3 KiB
JavaScript
60 lines
1.3 KiB
JavaScript
var strings = (function() {
|
|
var longestCommonPrefix = function(strings) {
|
|
strings = _.filter(strings, _.isString);
|
|
|
|
if (strings.length === 0) {
|
|
return '';
|
|
}
|
|
|
|
var prefix = '';
|
|
var maxlen = _.min(_.map(strings, function(s) { return s.length }));
|
|
var i;
|
|
var j;
|
|
var c;
|
|
|
|
for (i = 0; i < maxlen; i++) {
|
|
c = strings[0].charAt(i);
|
|
for (j = 0; j < strings.length; j++) {
|
|
if (strings[j].charAt(i) !== c) {
|
|
return prefix;
|
|
}
|
|
}
|
|
prefix = prefix + c;
|
|
}
|
|
|
|
return prefix;
|
|
}
|
|
|
|
// Like longestCommonPrefix, but only breaks at whitespace
|
|
var commonPrefix = function(strings) {
|
|
var prefix = longestCommonPrefix(strings);
|
|
if (strings[0] && strings[0] === prefix) {
|
|
// All strings are the same
|
|
return prefix;
|
|
}
|
|
|
|
var regex = /(^.*[\s\.]+)/;
|
|
var match = regex.exec(prefix);
|
|
if (match) {
|
|
return match[1];
|
|
}
|
|
return '';
|
|
}
|
|
|
|
// Shortens a list of strings by removing common prefixes.
|
|
var shorten = function(prefixFn, strings) {
|
|
var prefix = prefixFn(strings);
|
|
return _.map(strings, function(s) {
|
|
if (s && s.length !== prefix.length) {
|
|
return s.substring(prefix.length);
|
|
}
|
|
return s;
|
|
});
|
|
};
|
|
|
|
return {
|
|
commonPrefix: commonPrefix,
|
|
longestCommonPrefix: longestCommonPrefix,
|
|
shorten: shorten
|
|
}
|
|
})();
|