【问题标题】:How to remove empty columns in 2D Array in Javascript efficiently如何在Javascript中有效地删除二维数组中的空列
【发布时间】:2019-03-09 22:49:56
【问题描述】:

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

Input    csvData = [["", "2", "",  ""], ["", "3", "", ""], ["", "", "4", ""]]

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

   Output   csvData = [[ "2", ""], ["3", ""], ["","4"]]

我正在尝试但无法完成。

  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;
      }

    }

  }

【问题讨论】:

  • 为了提高效率和可维护性,我会考虑使用切片方法 (w3schools.com/jsref/jsref_slice_array.asp)。
  • 为什么第二列留在输出矩阵中?
  • 只有每行的第一个单元格是空的。
  • 我不明白,输出不应该是:csvData = [[ "2", ""], ["3", ""], ["", "4"]]
  • 是的@ibrahimmahrir .. 我的错。

标签: javascript arrays csv multidimensional-array data-structures


【解决方案1】:

你可以先得到填充的列,然后过滤数组。

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);
.as-console-wrapper { max-height: 100% !important; top: 0; }

对于只删除最后一个空列,您可以获取已填充列的最大值并删除其余列。

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);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

【解决方案2】:

使用Array.reduce()Array.some() 来识别空列。

然后使用Array.map() 迭代数组,并使用Array.filter() 删除空列处的项目。

const removeEmptyColumns = arr => {
  // detect empty columns
  const emptyColumns = (arr[0] || []).map((c, i) => arr.some(a => a[i]))
  
  // filter empty columns
  return arr.map(a => a.filter((_, i) => emptyColumns[i]))
}

pp(removeEmptyColumns([["", "2", "",  ""], ["", "3", "", ""], ["", "", "4", ""]]))

pp(removeEmptyColumns( [["1", "2", "", "4"], ["", "3", "", ""], ["", "", "", "2"]]
))

function pp(d) {
  console.log(JSON.stringify(d))
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
相关资源
最近更新 更多