GAS - проблема с удалением дубликатов из массива (один или несколько столбцов) - PullRequest
0 голосов
/ 20 марта 2020

Это расширение этот вопрос ... Разница в том, что вопрос касается диапазонов из 1 столбца, а этот вопрос задает диапазоны из 1 или 2 столбцов.

У меня есть пара столбцов с набором чисел, которые я готовлю для запроса. Некоторые из этих чисел имеют лидирующие нули, и мне нужно будет сохранить их в списке с лидирующими нулями и без лидирующих нулей.

До сих пор я создал столбец значений с лидирующими и без лидирующих нулей. , Вот пример массива, когда I getValues для столбцов.

[[1],[2],[001],[002],[1],[2]] для одного столбца или [[1,1],[2,1],[001,1],[002,1],[1,1],[2,1]] для нескольких столбцов

Конечный результат должен быть ... [[1],[2],[001],[002]] или [[1,1],[2,1],[001,1],[002,1]], соответственно.

Последние два были отброшены, потому что они были дубликатами, и мне нужно это только один раз в массиве.

Вот что я пытаюсь но у меня возникают проблемы:

var array = sh.getRange(1,sh.getLastColumn(),sh.getLastRow(),1).getValues();
var uniqueArray = removeDuplicates(array)

function removeDuplicates(myArray){
  var newArray = [];
  myArray.forEach(function(x){
    if(newArray.indexOf(x[0]) === -1){
      newArray.push(x[0]);
    }                   
  });
}

Ошибка: массив возвращается как ноль, а затем, когда я пытаюсь получить uniqueArray.length, он выдаст мне TypeError: Cannot read property 'length' of undefined

Я также пробовал:

var uniqueArray = Array.from(new Set(array));

Кажется, что это будет менее обременительным, и мне нравится, но он возвращает все значения. Это не отбрасывает дубликаты.

Что я делаю не так и каков наилучший подход? Как я могу это исправить?

1 Ответ

2 голосов
/ 20 марта 2020

Используйте Карта , чтобы создать карту ha sh с уникальными ключами:

const remDups = (arr2d, colToCompare = 0) => [
  ...arr2d
    .reduce(
      (map, row) =>
        map.has(row[colToCompare]) ? map : map.set(row[colToCompare], row),
      new Map()
    )
    .values(),
];
console.log(
  remDups([
    [1, 1],
    [2, 1],
    ['001', 1],
    ['002', 1],
    [1, 2],
    [2, 3],
  ])
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...