Сценарий приложения: отфильтровывать пустые элементы из массива - PullRequest
0 голосов
/ 08 марта 2019

enter image description here

У меня есть следующая функция:

  var rows = sheet2Json(sheet);

  var emails = rows.filter(function (el) { //ONLY CHECKED ROWS.
         return el != "";
    })
               .map(function (row) { //ONLY CHECKED ROWS.
      return row['EMAIL'];
    });  



  Logger.log(emails)
  return (emails);
}

строк создает лист в массив объектов, который выглядит следующим образом:

[{ EMAIL=xxx,  TEMPLATE=CONSULT, Index=Thu Jan 24 16:26:02 GMT-05:00 2019 }
...
]

Я хочу, чтобы массив всех писем отфильтровывал пустые строки. С кодом выше я получаю:

[ K@DF.COM, K@DF.COM,  , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ]

Как мне избавиться от пустых строк?

Ответы [ 2 ]

2 голосов
/ 08 марта 2019

Сначала необходимо получить свойство EMAIL, а затем отфильтровать записи, которые являются пустыми или неопределенными:

var rows = [
  { EMAIL: 'a@b.com', prop: 'bla' },
  { EMAIL: '', prop: 'bla' },
  { EMAIL: undefined },
  { EMAIL: 'd@b.com', prop: 'bla' },
  { },
  undefined
];

var emails = rows
  .map(function (row) { return row && row.EMAIL; })
  .filter(Boolean);

console.log(emails);

Причина, по которой он не работает, заключается в том, что вам нужно отфильтровать пустые поля EMAIL, но вы фильтруете строки, сравнивая их с пустой строкой. Пустая строка ({}) не пройдет проверку фильтра.

Чтобы заставить его работать по-другому, вам нужно сначала отфильтровать строки по их свойству EMAIL, а затем отобразить:

var rows = [
  { EMAIL: 'a@b.com', prop: 'bla' },
  { EMAIL: '', prop: 'bla' },
  { EMAIL: undefined },
  { EMAIL: 'd@b.com', prop: 'bla' },
  { },
  undefined
];

var emails = rows
  .filter(function (row) { return row && row.EMAIL; })
  .map(function (row) { return row.EMAIL; });

console.log(emails);
1 голос
/ 08 марта 2019
  • Вы хотите извлечь значения EMAIL из объекта, например [{ EMAIL=xxx, TEMPLATE=CONSULT, Index=Thu Jan 24 16:26:02 GMT-05:00 2019 }...], с помощью Google Apps Script.

Если мое понимание верно, как насчет этой модификации?В этой модификации я использовал reduce().Пожалуйста, подумайте об этом как об одном из нескольких ответов.

Модифицированный скрипт:

var emails = rows.reduce(function (ar, row) {
  row['EMAIL'] && ar.push(row['EMAIL']);
  return ar;
}, []);

Ссылка:

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