Иногда я заглядываю в яндекс метрику на предмет поисковых запросов, связанных со скриптами. И один запрос поставил меня в тупик. А именно — «именованные массивы в 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('Крылов Эрик Михаилович'))
}
с полученным результатом:
Ваше мнение важно и может улучшить блог
Я хочу услышать ваше мнение и ваши идеи о том, как сделать этот сайт еще лучше. Примите участие в опросе, чтобы поделиться вашими пожеланиями, предложениями и замечаниями. Пройдите опрос сейчас и помогите сделать этот сайт более полезным для вас!
Добрый день.
Как с Вами связаться??
Напишите мне пож-ста в ТГ