Увеличить значение indexOf () на единицу - PullRequest
0 голосов
/ 01 апреля 2019

Мне нужно повторять каждую букву в массиве букв таким образом: например, [a, b, c, d] => a, bb, ccc, dddd

Я думаю, что-то естьнеправильно с этой частью: splitStr.indexOf (x) + 1)

Не могли бы вы взглянуть и дать мне подсказку, что здесь не так?Благодарю.(Окончательный результат должен быть A-Bb-Ccc-Dddd в виде строки)

function accum(s) {
  var splitStr = s.toLowerCase().split('') // [a, b, c, d]
  var arr = splitStr.map(x => x.repeat(splitStr.indexOf(x) + 1)) // [a, bb, ccc, ddd]
  arr = arr.map(a => a.slice(0, 1).toUpperCase() + a.slice(1).toLowerCase())
  return arr.join('-')
}
console.log(accum('abcd'))

Ответы [ 4 ]

4 голосов
/ 01 апреля 2019

Используйте аргумент индекса обратного вызова map() и сохраните его в массиве.

Вы также можете объединить это в один map() вместо двух

function accum(s) {
  var splitStr = s.toLowerCase().split('') // [a, b, c, d]
  var arr = splitStr.map((x, i) => x.toUpperCase() + x.repeat(i));     
  return arr.join('-')
}
console.log(accum('abcd'))
3 голосов
/ 01 апреля 2019

Вы можете использовать аргумент index (второй) обратного вызова Array.map () и сохранить производительность, используя верхний регистр внутри первого map().

function accum(s)
{
    var splitStr = s.toLowerCase().split('');
    var arr = splitStr.map((x, idx) => x.toUpperCase() + x.repeat(idx));    
    return arr.join('-')
}

console.log(accum('abcd'));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

Кроме того, вы можете подойти к тому же, используя String.replace () и функцию замены :

function accum(s)
{
    return s.toLowerCase().replace(/./g, (match, offset) =>
    {
        let token = offset < s.length - 1 ? "-" : "";
        return match.toUpperCase() + match.repeat(offset) + token;
    });
}

console.log(accum('abcd'));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
1 голос
/ 01 апреля 2019

Вы можете использовать repeat () . Он возвращает новую строку, которая содержит указанное количество копий строки, для которой она была вызвана, объединенной вместе.

 var list = ['a', 'b', 'c', 'd'];
 var result = Array.from(list, (v, i) => {
                  let value = v.repeat(i + 1);
                  return value.charAt(0).toUpperCase() + value.slice(1)
                 }).join('-');
 console.log(result);
0 голосов
/ 01 апреля 2019

Вы можете сопоставить и присоединиться так:

var s = 'AbCd';
var array1 = s. toLowerCase().split(''); //['a','b','c','d'];
const map1 = array1.map((x, index) => x.toUpperCase() + x.repeat(index)).join('-');

console.log(map1);
...