我有字符串var str1 = 'foobarbaz'
和var str2 = 'bazfoo'
我想根据重叠的起始和结束字符加入它们。我要找的结果是'foobarbazfoo'
。
我目前正在以下列方式进行:
function merge(str1, str2) {
var size = Math.min(str1.length, str2.length);
index = 0;
for (var i = 0; i < size; i++) {
var ends = str1.substr(str1.length - i);
var starts = str2.substr(0, i);
if (ends === starts) {
index = i;
}
}
if (index === 0) {
throw 'Strings do not overlap';
} else {
return str1 + str2.substr(index, str2.length);
}
}
我想知道,如果有更优雅高效的方式吗?
答案 0 :(得分:1)
我认为最好将这个功能添加到String
的{{1}}并使用startsWith()和Conditional (ternary) Operator来解决这个问题:
prototype
就速度而言,两种方法都是相同的(测试执行时间为Performance.now())
但更少的行和declarative rather than imperative代码。
随意选择String.prototype.merge = function(str) {
let match;
for (let i = this.length; i >= 0; i--)
(str.startsWith(this.slice(i))) && (match = this.slice(i));
return this.slice(0, this.indexOf(match)) + str.slice(str.indexOf(match), str.length)
}
let merged = 'foobarbaz'.merge('bazfoo')
console.log(merged);
和slice
(slice vs substring)