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

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

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

[[1],[2],[001],[002],[1],[2]]

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

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

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

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

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

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

Ответы [ 2 ]

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

Использование Наборы :

const removeDuplicates = arr2d => [...new Set(arr2d.flat())].map(e => [e]);
console.info(removeDuplicates([[1],[2],[001],[002],[1],[2]]))

Используйте getDisplayValues, чтобы получить строки

1 голос
/ 20 марта 2020

Попробуйте:

function removeDups(mA){
  //Logger.log('vA:',mA);
  let s=new Set();
  mA.forEach(function(a){
    a.forEach(function(e) {
      s.add(e);//add elements to a set
    });
  });
  //Logger.log('set: %s',s.keys());
  const oA=[...s];//expand the set back to a unique array
  //Logger.log('oA: %s',oA);
  return oA;
}

Примечание: для этого требуется новый движок v8

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

JavaScript Set

Set.add ()

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