如何在不嵌套的情况下多次将字符串拆分为数组? JavaScript

时间:2018-08-19 00:06:04

标签: javascript arrays

我正在做一个练习(自学),其中必须有一个数组,该数组的字符串要插入n次。

我有这个

var splitTxt = [];

for(i=0 ; i<n ; i++)
  {
    splitTxt += text.split('');
  }

text是函数中给定的字符串。我环顾四周,但只见到有关如何在数组末尾添加字符和其他字符串等的建议。

添加split通常会产生所需的结果,但是,当这样循环时,我在数组的每个索引中都得到一个逗号。这是怎么回事,我该怎么做?

我可以这样做:

for(i=0 ; i<n ; i++)
  {
    splitTxt.push(text.split(''));
  }

但这会产生嵌套数组,这是不希望的。

我也可以这样做:

var secondChar = [].concat(...Array(n).fill(text.split('')));

但是,还是嵌套数组。不过,我很喜欢这一点,使用数组构造函数将其弄乱了,非常聪明。 @CertainPerformance here

给出的答案

编辑:对不起,我还不够清楚。我想多次将其拆分为数组:

var text = "hello there!";
n = 3;

desired result: ["h","e","l","l","o"," ","t","h","e","r","e","!","h","e","l","l","o"," ","t","h","e","r","e","!","h","e","l","l","o"," ","t","h","e","r","e","!"]

3 个答案:

答案 0 :(得分:2)

看到您进行编辑后,最简单的方法就可以在一行中完成:

console.log('hello there!'.repeat(3).split(''));

答案 1 :(得分:1)

想看看我是否可以在不使用重复和拆分的情况下做到这一点,这就是我的想法。

function mapx(text, x) {
    var myArray = [];
    for (var y = 0; y < x; y++) { 
        myArray = myArray.concat(Array.prototype.map.call(text, i => i));
    }
    return myArray;
}

var result = mapx('hello there!', 3);

console.log(result);

浏览器完全支持

array.map和array.concat。您可以使用.split代替.map-实际上,我相信拆分基准测试要比在小型数组中映射更快。当物体变大时,地图会占优势。

答案 2 :(得分:0)

根据您的示例,只需重复文本n次,然后将其拆分:

function splitText(text, n) {
  return text.repeat(n).split('');
}

var result = splitText('hello there!', 3);
console.log(result);

请记住,旧版浏览器不支持String.prototype.repeat,但是可以很容易地对其进行填充。