假设我在 typescript 中有一个二维数组。确切地说,在源代码中它看起来像这样:
tsvData: any;
this.tsvData = this.UploaderService.tsvData.split("\n").map(function(row){return row.split("\t");});
我想将每个表的长度更改为等于最长的表,前提是最长的表的长度大于或等于 5。如果最长的表的长度小于 5,我想将每个表的长度更改为 5。我想用空字符串填充缺失的位置。我添加两个例子来理解我的目标是什么。另外,我想删除所有带有空字符串的数组。
示例 1
在此示例中,最长数组等于 4,因此我将每个表的长度更改为 5。
输入:
[["text1", "text2", "text3", "text4"],
["text5", "text6"],
["text7"],
["text8", "text9", "text10"],
[""]]
输出:
[["text1", "text2", "text3", "text4", ""],
["text5", "text6", "", "", ""],
["text7", "", "", "", ""],
["text8", "text9", "text10", "", ""]]
示例 2
在此示例中,最长数组等于 6,因此我将每个表的长度更改为 6。
输入:
[["text1", "text2", "text3", "text4"],
["text5", "text6"],
["text7"],
["text8", "text9", "text10", "text11", "text12", "text13"],
[""]]
输出:
[["text1", "text2", "text3", "text4", "", ""],
["text5", "text6", "", "", "", ""],
["text7", "", "", "", "", ""],
["text8", "text9", "text10", "text11", "text12", "text13"]]
最佳答案
让我们将其分解为几个步骤:
- 查找二维数组的最大长度。
- 检查是否为
>= 5
。在此基础上,创建一个maxLength
。 - 然后循环遍历二维数组,创建其余数组并用
""
填充它。 - 将其余数组与二维数组的每个项目合并。
试试这个:
var initialTime = performance.now();
var array1 = [
["text1", "text2", "text3", "text4"],
["text5", "text6"],
["text7"],
["text8", "text9", "text10"],
[""]
];
var array2 = [
["text1", "text2", "text3", "text4"],
["text5", "text6"],
["text7"],
["text8", "text9", "text10", "text11", "text12", "text13"],
[""]
];
function fillRestItems(arrays) {
var maxArrayLength = Math
.max(...arrays.map(array => array.length));
var maxLength = maxArrayLength >= 5 ? maxArrayLength : 5;
return arrays
.map(arr => {
if(!(arr.length === 1 && arr[0] === "")) {
var addedArray = new Array(maxLength - arr.length).fill("");
return [...arr, ...addedArray];
}
})
.filter(array => array !== undefined);
}
console.log('Filled Array 1:', fillRestItems(array1));
console.log('Filled Array 2: ', fillRestItems(array2));
var finalTime = performance.now();
console.log(`This took: ${(finalTime - initialTime)} ms`);
关于arrays - 如果最长的表的长度大于或等于5,如何将每个表的长度更改为等于最长的表的长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53237873/