【问题标题】:Remove Columns From Grid Array With JavaScript使用 JavaScript 从网格数组中删除列
【发布时间】:2019-04-01 21:02:40
【问题描述】:

编写一个接受两个参数的函数removeColumns

originalGrid(二维数组)

numColums(号码)

removeColumns 应该返回一个删除正确列数的新网格。如果numColumns = 1,则删除一列。如果numColumns = 2,则删除两列。

removeColumns([[1, 2, 3],
               [1, 2, 3],
               [1, 2, 3],
               [1, 2, 3]], 2);
/* => [[1],
       [1],
       [1],
       [1]]
*/

我试过了:

function removeColumns (originalGrid, numColumns) {

  let newGrid = [];

  //if numColumns = 1, remove 1 column

  for (let col = 0; col < originalGrid.length; col ++)

    if (numColumns === 1) {
      newGrid.pop(col)
    }

  //if numColums = 2, remove 2 columns

    else if (numColumns === 2) {
      newGrid.pop(col + 1)
    }

  return newGrid;

}

这有几个问题。

我了解如何从一个数组中删除最后一项:

function removeItem(array) {

  let poppedArray = array.pop();

  return array;

}

但我不明白如何遍历网格中的三个连续数组,并从所有三个数组中删除最后一项。

[1, 2, 3]
[1, 2, 3]
[1, 2, 3]

我想一旦我理解了如何删除一列的概念,我就会明白如何删除两列。

编辑Link to codepen

【问题讨论】:

    标签: javascript arrays grid row multiple-columns


    【解决方案1】:

    这是我制作的一个示例,它将删除您选择的一列。当您说“删除 2 列”时,我不确定您要删除 3 列中的哪一列,但我认为这应该能让您到达那里。我认为您缺少的是拼接方法。

    function removeColumns(arrayOfArrays, column) {
      for (var i = 0; i < arrayOfArrays.length; i++) {
        arrayOfArrays[i].splice(column - 1, 1);
      }
     return arrayOfArrays;
    }
    
    var arrayOfArrays = [
      [1, 2, 3],
      [1, 2, 3],
      [1, 2, 3],
      [1, 2, 3]
    ];
    var results = removeColumns(arrayOfArrays, 1);
    
    console.log(results);
    

    jsFiddle 在这里:https://jsfiddle.net/a5rqLbuh/

    如果我这样做是为了获得原始速度,我会合并一个库(例如 async)来同时发送所有数组以进行修改,然后再将它们重新组合在一起。我认为这不会保留数组数组的原始顺序,但这是值得研究的。

    【讨论】:

    • 很抱歉,这并没有返回任何内容。它需要返回一个新数组或arrayOfArrays。请查看 codepen 的链接以测试此代码:codepen.io/FullstackAcademy/pen/yKOgVR?editors=0010
    • 然后只返回一个新数组...我已经编辑了我的答案
    【解决方案2】:

    解决方法:

    function removeColumns(originalGrid, numColumns) {
      for (let i = 0; i < originalGrid.length; i++) {
        let row = originalGrid[i];
        row.reverse();
        row.splice(0, numColumns);
        row.reverse();
      }
      return originalGrid;
    }
    

    这样,您可以从数组的开头删除“numColumns”个元素,因为.splice() 总是从左到右删除元素(即使您从数组的后面开始拼接)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多