【问题标题】:Get a new string based upon a existing string with a specific length根据具有特定长度的现有字符串获取新字符串
【发布时间】:2019-12-03 13:23:35
【问题描述】:

我在弄清楚如何根据现有字符串生成新字符串时遇到问题。新创建的字符串应该有一个特定的length。如果 a 只能使用内置的 repeat 函数重复提供的字符串会容易得多,但这不会产生关于其长度的预期结果。

我有以下字符串:

const str = 'abc';

我需要重复 n 次:

const desiredLength = 10; // e.g.

所以,我尝试了这样的事情:

const string = "abc";
const len = 10;

// I took the string and made it into a array of characters
const strArr = string.split('');
// I created a new (empty) arry
const newArr = [];

// I used a for-in loop
for(let i in strArr){
// Implemented a simple condition
  while(newArr.length < len) {
// And finally uushed items to my new array
    newArr.push(strArr[i]);    
  }
}

但是当我将它记录到控制台时,我得到 [a,a,a,a,a,a,a,a,a,a]


期望的结果如下:
[a,b,c,a,b,c,a,b,c,a]

我的想法是将元素一个一个地推入一个新数组,直到达到所需的长度,这样我就可以在之后操作数组或/并使用join函数再次将其转换为所需的字符串.我在这里做错了什么,是否有更好的(完全)不同的方法来实现这一点?

【问题讨论】:

    标签: javascript arrays string for-loop


    【解决方案1】:

    一个简短的方法使用String#padEnd

    提供的字符串被重复或截断,直到想要的长度。

    var string = 'abc',
        length = 10,
        result = ''.padEnd(length, string);
    
    console.log(result);
    console.log(result.length);

    【讨论】:

    • padEnd 是一个很好的解决方案。谢谢。
    • 如果字符串较大,则会出现以下错误:RangeError: Invalid string length。有任何想法吗?您最近删除的第一个解决方案是什么?
    • 字符串有多长?
    • 你可以看看这里stackoverflow.com/posts/59158215/revisions,有点我不知道,如果你能看到这个。在这种情况下,我可以再次将其添加到答案中。
    • 1000000000000 :)
    【解决方案2】:

    您的代码的问题是它只会考虑第一个i。之后,while 循环将填充相同的strArr[i],直到到达len。在strArr中的第一项之后,它永远不会进入while循环,因为它不会满足条件

    您可以使用Array.from() 来获取指定length 的数组。每个索引的值将根据index % str.length来决定

    function repeat(str, length) {
      return Array.from({ length }, (_, i) => str[i % str.length])
    }
    
    console.log(JSON.stringify(repeat("abc", 10)))
    console.log(JSON.stringify(repeat("javascript", 15)))

    【讨论】:

    • 感谢您的回答。它就像一个魅力。我投了赞成票,但不幸的是,有人也提供了一个很好的答案,只是快了一点。我学到了一些新东西,所以再次感谢你。
    猜你喜欢
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    • 2011-05-13
    相关资源
    最近更新 更多