![](/img/trans.png)
[英]How to push object keys to an array multiple times based on their integer values in 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.