Удалить столбцы из сетки с помощью JavaScript - PullRequest
1 голос
/ 02 апреля 2019

Напишите функцию 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]

Думаю, как только я пойму концепцию удаления одного столбца, я пойму, как удалить два столбца.

РЕДАКТИРОВАТЬ : Ссылка на codepen

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

Вот пример, который я сделал, который удалит один столбец по вашему выбору.Я не уверен, какой из 3 столбцов вы хотите удалить, когда говорите «удалить 2 столбца», но я думаю, что это поможет вам.Я думаю, что вам не хватает метода сплайсинга.

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, чтобы отправлять все массивы одновременнобыть изменены и затем снова собраны вместе.Я не думаю, что это сохранит первоначальный порядок массива массивов, но это то, что нужно рассмотреть.

0 голосов
/ 17 июня 2019

Обходной путь:

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() всегда удаляет элементы слева направо (даже есливы начинаете сращивание в конце массива).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...