试图在2个奇数之间插入短划线。错误:非法返回语句

时间:2017-11-22 03:05:01

标签: javascript arrays array-splice

function insertDash(str) {

    var arr = str.split("");

    for (var i = 0; i < arr.length; i++) {

        if (arr[i] % 2 != 0 && arr[i + 1] % 2 != 0) {

            var x = arr.splice(i + 1, 0, '-');

        }

    }

    return arr;

}

console.log(insertDash("99999"));

2 个答案:

答案 0 :(得分:0)

你可以从数组的末尾进行迭代,因为你可能会插入一个破折号并且数组会有一个新的长度。

如果从最后开始,则不会更改有资格测试和插入短划线的项目的长度。

function insertDash(string) {
    var array = string.split(""),
        i = array.length;

    while (i--) {
        if (array[i] % 2 && array[i + 1] % 2) {
            array.splice(i + 1, 0, '-');
        }
    }
    return array.join('');
}

console.log(insertDash("99999"));
console.log(insertDash("1122334455"));

答案 1 :(得分:0)

您可以将String#replace与带有lookahead的正则表达式一起使用:

function insertDash(string) {
    return string.replace(/([13579](?=[13579]))/g, "$1-");
}

console.log(insertDash("99999"));
console.log(insertDash("1122334455"));

另一个选项是使用Array#reduce来创建字符串:

function insertDash(string) {
    return string.split('').reduce(function(s, c, i, arr) {
      return s + c + (c % 2 && arr[i + 1] % 2 ? '-' : '');
    }, '');
}

console.log(insertDash("99999"));
console.log(insertDash("1122334455"));