基于startsWith()和endsWith()加入字符串

时间:2018-04-11 22:35:33

标签: javascript string

我有字符串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);
    }
}

我想知道,如果有更优雅高效的方式吗?

1 个答案:

答案 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);sliceslice vs substring