将列表从文本区域拆分成块并使用javascript添加额外文本[已关闭]

kb5ga3dv  于 2023-01-01  发布在  Java
关注(0)|答案(1)|浏览(105)
    • 已关闭**。此问题需要超过focused。当前不接受答案。
    • 想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。

十小时前关门了。
Improve this question
我列了一个清单:第一个月
我需要有2个文本区,在第一个我需要把上面的列表,我点击一个按钮后,然后在第二个文本区,我会得到这样的列表:

<!--startline-->[new text="table" ids="125,248,11"]
<!--startline-->[new text="table" files="2" ids="486,3554,89,55"]

所以规则是这样的:

  • 我需要3元素的块大小
  • 我需要添加自定义文本之前和之后的块:x1个月1个月1x + x1个月2个月1x + x1个月3个月1x
  • 如果最后一个块有2或1个元素,那么我需要将其与前一个块合并,为该块生成的文本将是:x1米4英寸1x + x1米5英寸1x + x1米6英寸1x
  • 每个自定义文本和块都将在新行上,如上面的示例所示

我找到了一些有用的东西,使用.slice.splice,但问题是我需要添加自定义文本,而不是像下面这样创建数组:https://stackoverflow.com/a/47061736/1773862
那么,有什么想法吗?:)

  • ---------溶液
    x一个一个一个一个x一个一个二个x
    感谢@mplungjan提供解决方案的第一部分!
rslzwgfq

rslzwgfq1#

1.使用拆分
1.使用分块器-我在Split array into chunks找到了一个
1.可以使用模板文本生成字符串
此选项仅在最后一个选项上添加files属性,并且仅当其大于chunksize时添加

const chunker = (list, size) => list.value.trim().split(',').reduce((acc, cur, i) => { const ch = Math.floor(i / size); acc[ch] = [].concat((acc[ch] || []), cur); return acc }, []);

const myList = document.getElementById('mylist');
const myNewList = document.getElementById('mynewlist');
const chunkSize = 3;
document.getElementById('generate').addEventListener('click', () => {
  let chunks = chunker(myList, chunkSize),
    lastChunk = [...chunks[chunks.length - 1]], 
    partial = lastChunk.length < chunkSize,
    max = chunks.length-2; // max is only used if partial
  if (partial) {
    chunks = chunks.slice(0, -1); // chop the last off
    chunks[chunks.length - 1] = chunks[chunks.length - 1].concat(lastChunk); // concat to new last chunk
  }
  myNewList.value = chunks.map((chunk, i) => `<!--startline-->[new text="table"${partial && i===max ? ' files="2"' : '' } ids="${chunk.join(',')}"]`).join('\n')

});
#mynewlist {
  width: 700px;
  height: 300px;
}
<textarea id="mylist">30318,30319,30320,30321,30322,30323,30324,30325,30326,30327,30328,30329,30330,30331,30332,30333,30334,30335,30336,30337,30338,30339,30340,30341,30342,30343,30344,30345,30346,30347,30348,30349,30350,30351,30352,30353,30354,30355,30356,30357,30358,30359,30360,30361,30362,30363,30364,30365,123,999</textarea>
<br><br>
<button id="generate">Generate new list</button>
<br><br>
<textarea id="mynewlist"></textarea>

相关问题