Сравните 1D и 2D массивы и верните значения для 2D массива, если есть совпадение с Google App Script - PullRequest
0 голосов
/ 13 февраля 2020

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

var firstArray = [1,5,4,8]

Затем с помощью моего сценария я получаю API, который возвращает мне второй список идентификаторов со значением, связанным с ними (пара ключ-значение, если хотите)

var secondArray = [[5,"foo"],[6,"bar"],[7,"blaa"]]

Я хочу сравнить два массива и пропустить значения, полученные из API во втором массиве на моем листе, когда Идентификаторы совпадают.

Таким образом, вывод на моем листе после выполнения сценария будет выглядеть следующим образом:

IDs Values
1
5   foo  
4
8

Сейчас я застрял в следующем сценарии:

  for(var line in firstArray) 
{

 var isMatched = secondArray.indexOf(firstArray[line]); 
 if (isMatched !== -1) 
 {
   //do something
   ss.getRange(line, 3, 1, 1).setValue(valuesFromsecondArray);
 };
}

Я хочу провести l oop через первый массив, и когда есть совпадение со вторым массивом, я хочу получить индекс из первого массива, чтобы я мог передать значение в правой строке в моем листе

1 Ответ

1 голос
/ 13 февраля 2020

Вы можете использовать объект или map для хранения ключа, значения второго массива:

function compareTest(){
const firstArray = [1,5,4,8];
const secondArray = [[5,"foo"],[6,"bar"],[7,"blaa"]];
const sMap = new Map(secondArray);
const output = firstArray.map(num=>{
  return sMap.has(num) ? [num, sMap.get(num)] : [num, null]
});
console.log(output);
/*SpreadsheetApp.getActive()
.getSheetByName("Sheet1")
.getRange(2, 3, output.length, output[0].length)
.setValues(output);*/
}
compareTest();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...