繁体   English   中英

根据另一个数组数组的长度将字符串多次推送到数组javascript

[英]Push strings to an array multiple times based on length of another array of arrays javascript

我是 JS 新手,我有一个程序(用通用工作流语言编写),它接受两个数组,一个文件是字符串之一。 数组最初的长度相同:

var headers = ["Header1", "Header2", "Header3"];
var files = [file1, file2, file3];

每个头对应一个特定的文件,所以 Header1 -> file1, Header2 -> file2, Header3 -> file3。 我的工作流程中有一个步骤是将文件按一定数量的行拆分为一个拆分文件数组,所以现在我有一个文件数组数组,如下所示:

var files = [[01.file1, 02.file1, 03.file1], [01.file2, 02.file2],
             [01.file3, 02.file3, 03.file3, 04.file3, 05.file3]];

由于文件被分割成一定数量的行,我无法事先知道文件将被分割多少次(我一次处理很多文件)。

基本上,我现在要做的是复制每个标题,等于每个子数组的长度,因此 Header1 应该复制 3 次,Header2 应该复制两次,Header3 应该复制 5 次。

我看过一些关于如何将单个字符串复制到已知长度的数组中的帖子,这些帖子使用var arrayNew = new Array(int).fill(x)方法,但这似乎静态地为数组分配了一个长度并填充它只有一个值。

我试图通过数组的files数组的长度来复制headers字符串。 这是我到目前为止所拥有的:

var dupStrings = [];
for (var i = 0; i < files.length; i++) {
    var arrLen = files[i].length;
    dupStrings.push(headers[i].repeat(arrLen));
}

但这目前给了我:

var headers = ["Header1Header1Header1", "Header2Header2",
               "Header3Header3Header3Header3Header3"]

我现在明白为什么会发生这种情况,但我不知道如何解决它。 我希望它是:

var headers = [["Header1", "Header1", "Header1"], ["Header2", "Header2"],
               ["Header3", "Header3", "Header3", "Header3", "Header3"]]

您当前的问题发生了,因为headers[i].repeat(arrLen)返回string ,而您需要一个array ,您可以dupStrings.push(Array(arrLen).fill(headers[i]))

然而,还有另一种方式:

 const headers = ["Header1", "Header2", "Header3"], files = [[01.file1, 02.file1, 03.file1], [01.file2, 02.file2], [01.file3, 02.file3, 03.file3, 04.file3, 05.file3]], result = headers.map((h,i) => Array.from({length: files[i].length}, () => h)) console.log(result)

尝试地图填充

 var headers = ["Header1", "Header2", "Header3"]; var files = [["01.file1", "02.file1", "03.file1"], ["01.file2", "02.file2"], ["01.file3", "02.file3", "03.file3", "04.file3", "05.file3"]]; var dupStrings = headers.map(function(element, index) { return Array(files[index].length).fill(element); }); console.log(dupStrings)

您的 for 循环不正确,您必须迭代 files[i] 才能创建数组,因为 repeat 正在创建一个字符串。 不使用填充地图的答案(对你来说可能很难理解地图和填充是如何工作的)是:

for (let i = 0; i < files.length; i++) {
 for (let j = 0; j < files[i].length; j++) {
    dupStrings.push(headers[i]);
 }
 headers[i] = dupStrings;
 dupStrings = [];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM