【问题标题】:How do I split a string into an array multiple times without it being nested? JavaScript如何在不嵌套的情况下多次将字符串拆分为数组? JavaScript
【发布时间】:2018-08-19 00:06:04
【问题描述】:

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

我有这个

var splitTxt = [];

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

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

添加拆分通常会产生所需的结果,但是,当像这样循环它时,我在数组中的每个索引中都得到一个逗号。这里发生了什么,我该如何正确地做到这一点?

我可以这样做:

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","!"]

【问题讨论】:

  • 你能举一个输入textn和期望输出的例子吗?您的 splitTxt += text.split(''); 正在使用 splitTxt array 上的加法运算符,这可能不是您想要的,因为它导致 splitTxt 被重新分配给 string 而不是一个数组。
  • 好像[...text.repeat(n)]
  • @CertainPerformance 感谢您的意见,我希望我在问题中提到我没有粗鲁地召唤您 :) 我不熟悉 stackexchange 的语法。我在您的请求中附加了我的问题。
  • 不,问题中的@-提及不会通知用户,我只是经常浏览新问题:)
  • @ErikPhilips 虽然要求使用一些相同的方法,但这是一个独特的问题,因为 3x 的迭代并将它们推入新数组。

标签: javascript arrays


【解决方案1】:

看到你编辑后,最简单的实现你想要的方式就可以一行完成:

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

【讨论】:

  • 感谢您的回答,但是,我需要将相同的字符串放入 n 次,而不是放入 n 个字符串。
  • @JayJenkins 我已根据您的评论更新了我的答案。现在就来看看,这是你想要的吗?
  • 谢谢@V。 Sambor,上面的评论已经回答了。几乎和你的一样,虽然更优雅一点。
【解决方案2】:

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

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 - 事实上,我相信拆分基准比映射小数组更快。当物体变大时,地图有优势。

【讨论】:

    【解决方案3】:

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

    function splitText(text, n) {
      return text.repeat(n).split('');
    }
    
    var result = splitText('hello there!', 3);
    console.log(result);

    请记住,旧版浏览器不支持String.prototype.repeat,但它可以轻松填充。

    【讨论】:

      猜你喜欢
      • 2011-06-20
      • 2020-04-09
      • 2017-05-23
      • 1970-01-01
      • 1970-01-01
      • 2013-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多