将indexOf()值增加一

时间:2019-04-01 20:31:55

标签: javascript arrays repeat indexof

我需要以这种方式在字母数组中重复每个字母: 例如[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 个答案:

答案 0 :(得分:4)

使用map()回调的index参数并将其保存在数组中。

您还可以将其合并为一个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'))

答案 1 :(得分:3)

您也可以使用Array.map()回调的index参数(第二个参数),并在第一个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()replacement function来达到相同的效果:

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;}

答案 2 :(得分:1)

您可以使用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);

答案 3 :(得分:0)

您可以这样映射和加入:

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);