arrays - 如果最长的表的长度大于或等于5,如何将每个表的长度更改为等于最长的表的长度?

标签 arrays angular typescript multidimensional-array angular6

假设我在 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"]]

最佳答案

让我们将其分解为几个步骤:

  1. 查找二维数组的最大长度。
  2. 检查是否为>= 5。在此基础上,创建一个 maxLength
  3. 然后循环遍历二维数组,创建其余数组并用 "" 填充它。
  4. 将其余数组与二维数组的每个项目合并。

试试这个:

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/

相关文章:

javascript - 在 JavaScript 中打印 PHP 数组

javascript - 可拖动的 div 应避免 x 和 y 重叠

javascript - 避免 Angular2 在单击按钮时系统地提交表单

javascript - Angular2 ng用于从索引中添加数字++

visual-studio-2013 - VS 2013 Update 3 - 不支持 TypeScript

TypeScript - Readonly<T> 的可变性和反转

java - 创建对象数组的 ArrayList

C++ 设置结构体数组中的元素 = NULL

python - 更改多行数组的numpy矢量化方式(行可以重复)

angular - 解释 proxy.config.json 特性 angular 5