Сравните два массива, получите номера строк - PullRequest
0 голосов
/ 20 октября 2018

Я пытаюсь разбить то, что я хочу разделить на более мелкие шаги и вопросы, чтобы я мог лучше понять это.Я превратил два столбца (каждый из которых содержит адреса электронной почты, каждый из разных листов) в два одномерных массива ( ответил здесь ), которые теперь я хочу сравнивать на совпадения.Я хочу знать, какие из значений в "emailsPaidArray" также находятся в "emailsAllArray".Точнее, мне нужны номера строк из совпадений в "sheetAll" (как одномерный массив, например, "rowYesMatch"), а также номера строк тех, которые не совпадают (также как одномерный массив, например, "columnsNotMatch").

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

function paymentStatus() {

  // Variables

  var id = "ID";
  var spreadSheet = SpreadsheetApp.openById(id);
  var sheetAll = spreadSheet.getSheetByName("sheetAll");
  var sheetPaid = spreadSheet.getSheetByName("sheetPaid");
  var sheetOutput = spreadSheet.getSheetByName("sheetOutput");
  var allLR = sheetAll.getLastRow();
  var paidLR = sheetPaid.getLastRow();

  // get tow 1D arrays

  var emailsAll = sheetAll.getRange(2, 3, allLR).getValues();
  var emailsPaid = sheetPaid.getRange(2, 1, paidLR).getValues();

  var emailsAllArray = emailsAll.map(function(e) {return e[0];} );
  // Logger.log(emailsAllArray);

  var emailsPaidArray = emailsPaid.map(function(e) {return e[0];} );
  // Logger.log(emailsPaidArray);

  // compare two arrays

  // get rows

Выглядит так: sheetAll sheetPaid

1 Ответ

0 голосов
/ 20 октября 2018

Как насчет этого скрипта?Я заметил, что я неправильно понимаю ваш вопрос.Поэтому я обновил его.

var res = emailsAllArray.map(function(e, i) {return emailsPaidArray.some(function(f) {return e == f}) ? i + 2 : ""}).filter(Number);
// [2,3,5,6]

Вы также можете использовать этот скрипт.

var res = emailsAllArray.reduce(function(ar, e, i) {
  if (emailsPaidArray.some(function(f) {return e == f})) ar.push(i + 2);
  return ar;
},[]);
// [2,3,5,6]

Ссылки:

Редактировать:

Если вы хотитечтобы получить номера строк значений разностей, используйте это.

var res = emailsAllArray.map(function(e, i) {return emailsPaidArray.some(function(f) {return e == f}) ? "" : i + 2}).filter(Number);
// [4,7]

или

var res = emailsAllArray.reduce(function(ar, e, i) {
  if (!emailsPaidArray.some(function(f) {return e == f})) ar.push(i + 2);
  return ar;
},[]);
// [4,7]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...