根据字符数动态拆分数组

时间:2018-02-10 18:52:59

标签: javascript arrays algorithm sorting split

我有一个像这样的数组:

const testArray = [ 'blah', 'abc​testtt​​', 'atestc​', 'testttttt' ]

我希望在字符串到达​​某个字符数后将其拆分,例如让我们使用10个字符。此外,我希望输出交换自己能够在10个字符内使用。如果这对您没有意义,请参阅下面的预期输出。请假设数组中的每个项目不会超过10个字符,仅用于示例目的。

因此,一旦testArray达到10个字符,我希望下一个项目可能在新变量之下?不确定这是否是最佳方式。

这样的事可能吗?再次,这可能是非常低效的,如果是这样,请随意使用另一种方法。

const testArray = [ 'blah', 'abctesttt​​', 'atestc', 'testttttt' ]
if ((testArray.join('\n')).length) >= 10 {
    /* split the string into parts and store it under a variable maybe?
    console.log((the_splitted_testArray).join('\n')); */

}

预期输出:

"blah
atestc" //instead of using "abctesttt" it would use "atestc" as it's the next element in the array and it also avoids reaching the 10 character limit, if adding "atestc" caused the character limit to go over 10, I would like it to check the next element and so on

"abctesttt" // it can't add the remaining "testttttt" since that would cause the character limit to be reached

"testttttt"

1 个答案:

答案 0 :(得分:0)

首先,由于您无法在运行时无处创建新变量,因此您可能会使用“父” - 阵列,然后包含最大长度为10的实际字符串。 / p>

对于分组,您可能需要自己设计算法。我对算法的第一个想法就像下面这样。可能不是最好和最有效的方式(因为“有效”的描述取决于您的个人优先级),但您可以自己优化它:)

  1. 浏览$testArray[],将所有字符串排序为新的二维数组:$stringLength[$messagesWithSameLength[]]。与array(1=>array('.','a'),2=>array('hi','##',...),...)
  2. 一样
  3. 现在,总是尝试尽可能多地收集字符串。从一个最长的字符串开始,计算剩余空间并获得最适合它的字符串。如果没有,则启动一个新组。
  4. 始终尽量使用空间