如何在 Javascript 中有效删除二维数组中的空列

Sre*_*ddy 0 javascript csv arrays multidimensional-array data-structures

我有以下数组数组(二维数组)

Input    csvData = [["", "2", "",  ""], ["", "3", "", ""], ["", "", "4", ""]]
Run Code Online (Sandbox Code Playgroud)

如何从上面的数组中删除空列。

   Output   csvData = [[ "2", ""], ["3", ""], ["","4"]]
Run Code Online (Sandbox Code Playgroud)

我正在尝试但无法完成。

  removeEmptyColumns(csvData) {
    for (let i = 0; i < csvData.length; i++) {
      let col = csvData.map(function (value, index) { return value[i]; });
      for (let j = 0; j < col.length; j++) {
        if (col[j])
          break;
      }

    }

  }
Run Code Online (Sandbox Code Playgroud)

Nin*_*olz 5

您可以先获取填充的列,然后过滤数组。

var csvData = [["", "2", "",  ""], ["", "3", "", ""], ["", "", "4", ""]],
    columns = csvData.reduce(
        (r, a) => (a.forEach((v, i) => r[i] = r[i] || v), r),
        []
    );

csvData = csvData.map(a => a.filter((_, i) => columns[i]));

console.log(csvData);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)

要仅删除最后一个空列,您可以获取填充列的最大值并删除其余的。

var csvData = [["", "2", "",  ""], ["", "3", "", ""], ["", "", "4", ""]],
    max = csvData.reduce(
        (r, a) => (a.forEach((v, i) => v && (r = Math.max(r, i))), r),
        0
    );

csvData = csvData.map(a => a.slice(0, max + 1));

console.log(csvData);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)