Операции со строками: преобразование "А-Б-В" в "("б" (с))"


function dashesToParentheses(str) {
    var list = str.split('-');
    return str.replace(/-/g, '(') + repeatString(')', list.length - 1);
}

function repeatString(str, times) {
    if (times == 1)
        return str;

    return new Array(times + 1).join(str);
}

dashesToParentheses('a-b-c') // "a(b(c))"
dashesToParentheses('a-b') // "a(b)"
dashesToParentheses('a') // "a"
dashesToParentheses('') // ""

dashesToParentheses работает правильно. Я могу сделать это проще и быстрее?



782
6
задан 13 декабря 2011 в 10:12 Источник Поделиться
Комментарии
2 ответа

Имея разделит строку вы можете присоединиться к нему со скобками вместо замены их. Дополнительно вы можете выбрать, чтобы удалить функцию repeatString и ваши +/- 1, но он делает много смысла, как вы есть.

function dashesToParentheses(str) {
var list = str.split('-');
return list.join('(') + Array(list.length).join(')');
}

7
ответ дан 13 декабря 2011 в 11:12 Источник Поделиться

Ну, вы могли бы снять регулярного выражения. Но действительно ли это помогает
производительности остается только догадываться.

var d2p = function(s){
var one=[], two=[], a=s.split('-');
one.push(a.shift());
a.forEach(function(part){
one.push('(' + part);
two.push(')');
});
return one.join('') + two.join('');
};

Если вы не возражаете, имея результат полностью parenthesised,
тогда вы можете сделать это:

var d2p = function(s){
return s.split('-').reduceRight(function(whole, part){
return '(' + part + whole + ')';
}, '');
};

1
ответ дан 13 декабря 2011 в 11:12 Источник Поделиться