删除二维数组全部为0的行和列。

问题

 /**
   * 矩阵瘦身
   * 1.
   * [           [
   * [0,0,1],    [0,1],
   * [0,1,1], => [1,1]
   * [0,0,0]
   * ]           ]
   * 2.
   * [           [
   * [1,1,0],    [1,1,0],
   * [0,1,1], => [0,1,1]
   * [0,0,0]
   * ]           ]
   */`

我的:

reduceMatrix(data) {
    let del_row = [];
    let del_col = [];
    for (let i1 = 0; i1 < data.length; i1++) {
      let row = 0;
      let col = 0;
      const v1 = data[i1];
      for (let i2 = 0; i2 < v1.length; i2++) {
        row += data[i1][i2];
        col += data[i2][i1];
      }
      if (col === 0) {
        del_col.push(i1);
      }
      if (row === 0) {
        del_row.push(i1);
      }
    }

    // 删列
    for (let i1 = del_col.length - 1; i1 >= 0; i1--) {
      const del_index = del_col[i1];
      for (let i2 = 0; i2 < data.length; i2++) {
        data[i2].splice(del_index, 1);
      }
    }
    // 删行
    for (let i1 = del_row.length - 1; i1 >= 0; i1--) {
      const del_index = del_row[i1];
      data.splice(del_index, 1);
    }
  }

想要更优的方法

阅读 2.3k
1 个回答
function reduceMatrix(data) {
  let cols = data[0].reduce((res, v, i) => {
    if (v || data.some(arr => !!arr[i])) res.push(i);
    return res;
  }, []);
  return data.filter(arr => arr.some(v => !!v)).map(arr => cols.map(i => arr[i]));
};
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题