Ассоциативные массивы

Иногда я заглядываю в яндекс метрику на предмет поисковых запросов, связанных со скриптами. И один запрос поставил меня в тупик. А именно — «именованные массивы в app script». Даже немного погуглил… И понял что, искали, скорее всего, ассоциативные массивы, где подразумевается массив, в котором в качестве ключей применяются строки. То есть речь идёт о совокупности пар «ключ-значение» в виде массива.

Что по сути привычный нам массив массив. Но, с некоторыми нюансами.

Получаю массив

И всё, как обычно, стандартно, имею таблицу «ФИО-Возраст»

Получаю ее в массив массивов, убирая шапку:

function getPeople() {
  const ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('MAP JS')
  const arr = ws.getDataRange().getValues()
  arr.shift()
  console.log(arr)

}

Вывод такого массива имеет следующий вид:

Тут необходимо обратить внимание, что я намеренно сделал две последние записи «Сафонов Георгий Петрович» — полными тезками. Зачем? Потому что в ассоциативном массиве ключ ( в данном случае ФИО) должен быть уникальным.

new Map — перевожу массив в Ассоциативный

function getPeople() {
  const ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('MAP JS')
  const arr = ws.getDataRange().getValues()
  arr.shift()
  
  const arr1 = new Map(arr)
  console.log(arr1)
  Logger.log(arr1)
}

при этом ни консоль ни логгер не покажет его содержимое, потому что это уже по сути объект:

Смотрю иначе:

function getPeople() {
  const ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('MAP JS')
  const arr = ws.getDataRange().getValues()
  arr.shift()
  
  const arr1 = new Map(arr)
  for (let elem of arr1){
    console.log(elem)
  }
}

и выводится:

При этом, как уже и писал выше -» Сафонов Георгий Петрович» будет как ключ уникальным и в виде последней записи.

И в заключении: а зачем такие сложности?

Ассоциативный массив отличается от обычного лишь индексами, потому что вместо чисел можно подставить ключ, который будет отвечать за определённый элемент в массиве. Например, мне надо получить возраст «Крылов Эрик Михаилович»:

function getPeople() {
  const ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('MAP JS')
  const arr = ws.getDataRange().getValues()
  arr.shift()
  const arr1 = new Map(arr)
  console.log(arr1.get('Крылов Эрик Михаилович'))
}

с полученным результатом:


Ваше мнение важно и может улучшить блог

Я хочу услышать ваше мнение и ваши идеи о том, как сделать этот сайт еще лучше. Примите участие в опросе, чтобы поделиться вашими пожеланиями, предложениями и замечаниями. Пройдите опрос сейчас и помогите сделать этот сайт более полезным для вас!

У этой записи один комментарий

  1. Альберт

    Добрый день.
    Как с Вами связаться??
    Напишите мне пож-ста в ТГ

Добавить комментарий