HTML Diff
1 added 1 removed
Original 2026-01-01
Modified 2026-03-10
1 <p>В этой статье мы поговорим про ассоциативные массивы. Поймём, что это такое, рассмотрим основные принципы работы с такими массивами. А также обсудим, как создать ассоциативный массив в JavaScript.</p>
1 <p>В этой статье мы поговорим про ассоциативные массивы. Поймём, что это такое, рассмотрим основные принципы работы с такими массивами. А также обсудим, как создать ассоциативный массив в JavaScript.</p>
2 <h2>Ассоциативный массив - что это?</h2>
2 <h2>Ассоциативный массив - что это?</h2>
3 <p>Под ассоциативным массивом подразумевают массив, в котором в качестве ключей применяются строки. То есть речь идёт о совокупности пар "ключ-значение". Таким образом, в ассоциативном массиве любое значение связано с конкретным ключом, а доступ к этому значению производится по имени ключа.</p>
3 <p>Под ассоциативным массивом подразумевают массив, в котором в качестве ключей применяются строки. То есть речь идёт о совокупности пар "ключ-значение". Таким образом, в ассоциативном массиве любое значение связано с конкретным ключом, а доступ к этому значению производится по имени ключа.</p>
4 <p>Мы можем представить ассоциативный массив в виде небольшого ящика, где находятся отделения. Каждое отделение имеет имя (это ключ) и содержимое (это значение). Естественно, чтобы найти нужное отделение в ящике, мы должны знать имя отделения (ключ). Зная это имя, мы сможем получить содержимое отделения (значение).</p>
4 <p>Мы можем представить ассоциативный массив в виде небольшого ящика, где находятся отделения. Каждое отделение имеет имя (это ключ) и содержимое (это значение). Естественно, чтобы найти нужное отделение в ящике, мы должны знать имя отделения (ключ). Зная это имя, мы сможем получить содержимое отделения (значение).</p>
5 <h2>Создаём ассоциативный массив в JavaScript</h2>
5 <h2>Создаём ассоциативный массив в JavaScript</h2>
6 <p>Начиная с релиза ECMAScript 2015 (6), в JavaScript мы можем использовать для создания ассоциативного массива объект Map. До этого релиза в JavaScript не существовали типы данных, предназначенные лишь для создания ассоциативных массивов, поэтому создавались такие массивы с помощью объектов.</p>
6 <p>Начиная с релиза ECMAScript 2015 (6), в JavaScript мы можем использовать для создания ассоциативного массива объект Map. До этого релиза в JavaScript не существовали типы данных, предназначенные лишь для создания ассоциативных массивов, поэтому создавались такие массивы с помощью объектов.</p>
7 <p>Как вы должны помнить,<a>в JavaScript есть</a>тип данных Array. Но этот тип данных служит лишь для создания массивов, в которых в роли ключей применяются числа (индексы).</p>
7 <p>Как вы должны помнить,<a>в JavaScript есть</a>тип данных Array. Но этот тип данных служит лишь для создания массивов, в которых в роли ключей применяются числа (индексы).</p>
8 <h2>Ассоциативный массив: объект Map</h2>
8 <h2>Ассоциативный массив: объект Map</h2>
9 <p>Как мы уже сказали, для создания ассоциативных массивов в JavaScript используется тип данных Map. При этом в виде ключа мы можем использовать и примитивные, и ссылочные типы данных.</p>
9 <p>Как мы уже сказали, для создания ассоциативных массивов в JavaScript используется тип данных Map. При этом в виде ключа мы можем использовать и примитивные, и ссылочные типы данных.</p>
10 <p>Давайте посмотрим, как создаётся ассоциативный массив (экземпляр объекта Map):</p>
10 <p>Давайте посмотрим, как создаётся ассоциативный массив (экземпляр объекта Map):</p>
11 // создаём пустой ассоциативный массив var arr1 = new Map(); // создаём ассоциативный массив и добавляем три пары "ключ-значение" var arr = new Map([ ['key1', 'value1'], ['key2', 'value2'], ['key3', 'value3'] ]);<p>Если мы хотим узнать число элементов в массиве, пригодится свойство size:</p>
11 // создаём пустой ассоциативный массив var arr1 = new Map(); // создаём ассоциативный массив и добавляем три пары "ключ-значение" var arr = new Map([ ['key1', 'value1'], ['key2', 'value2'], ['key3', 'value3'] ]);<p>Если мы хотим узнать число элементов в массиве, пригодится свойство size:</p>
12 <p>Чтобы добавить элемент в массив (то есть в экземпляр объекта Map), используем метод set:</p>
12 <p>Чтобы добавить элемент в массив (то есть в экземпляр объекта Map), используем метод set:</p>
13 // добавляем в массив пару "ключ-значение" arr.set('key4','value4'); // добавляем в массив несколько пар "ключ-значение" arr.set('key5','value5'); arr.set('key6','value6'); // или так arr .set('key5','value5') .set('key6','value6');<p>Когда в массиве такой ключ уже есть, установится новое значение, связанное с ним:</p>
13 // добавляем в массив пару "ключ-значение" arr.set('key4','value4'); // добавляем в массив несколько пар "ключ-значение" arr.set('key5','value5'); arr.set('key6','value6'); // или так arr .set('key5','value5') .set('key6','value6');<p>Когда в массиве такой ключ уже есть, установится новое значение, связанное с ним:</p>
14 arr.set('key1','new value');<p>Чтобы получить значение по ключу, используем метод get:</p>
14 arr.set('key1','new value');<p>Чтобы получить значение по ключу, используем метод get:</p>
15 // получаем значение, которое ассоциировано с ключом 'key4' arr.get('key4'); // 'value4'<p>Если хотим проверить, есть ли ключ в массиве, нам пригодится метод has:</p>
15 // получаем значение, которое ассоциировано с ключом 'key4' arr.get('key4'); // 'value4'<p>Если хотим проверить, есть ли ключ в массиве, нам пригодится метод has:</p>
16 // существует ли в массиве arr ключ key2 arr.has('key2'); // true<p>Чтобы удалить из ассоциативного JavaScript-массива элемент по имени ключа, применяем метод delete:</p>
16 // существует ли в массиве arr ключ key2 arr.has('key2'); // true<p>Чтобы удалить из ассоциативного JavaScript-массива элемент по имени ключа, применяем метод delete:</p>
17 arr.delete('key1'); // true<p>Этот метод вернёт true, если ключ существовал в массиве, иначе он вернёт false.</p>
17 arr.delete('key1'); // true<p>Этот метод вернёт true, если ключ существовал в массиве, иначе он вернёт false.</p>
18 if (arr.delete('key1')) { console.log('Запись с ключом "key1" удалена из массива!'); } else { console.log('Запись с ключом "key1" в массиве не найдена!'); }<p>Чтобы очистить массив и удалить все элементы, подойдёт метод clear.</p>
18 if (arr.delete('key1')) { console.log('Запись с ключом "key1" удалена из массива!'); } else { console.log('Запись с ключом "key1" в массиве не найдена!'); }<p>Чтобы очистить массив и удалить все элементы, подойдёт метод clear.</p>
19 arr.clear(); // очищаем массив arr arr.size; // 0 (число элементов)<h2>Перебор ассоциативного массива в JavaScript</h2>
19 arr.clear(); // очищаем массив arr arr.size; // 0 (число элементов)<h2>Перебор ассоциативного массива в JavaScript</h2>
20 <p>Как правило, перебор ассоциативного массива осуществляется посредством цикла for...of. Итерацию мы можем организовать по ключам, записям и значениям ([key, values]).</p>
20 <p>Как правило, перебор ассоциативного массива осуществляется посредством цикла for...of. Итерацию мы можем организовать по ключам, записям и значениям ([key, values]).</p>
21 <p>Мы можем выполнить перебор ключей с помощью итерируемого объекта MapIterator, который возвращается посредством метода keys:</p>
21 <p>Мы можем выполнить перебор ключей с помощью итерируемого объекта MapIterator, который возвращается посредством метода keys:</p>
22 for (let key of arr.keys()) { console.log(key); }<p>Чтобы перебрать значения, воспользуйтесь итерируемым объектом MapIterator, который возвращается посредством методом values:</p>
22 for (let key of arr.keys()) { console.log(key); }<p>Чтобы перебрать значения, воспользуйтесь итерируемым объектом MapIterator, который возвращается посредством методом values:</p>
23 for (let value of arr.values()) { console.log(value); }<p>Теперь посмотрим, как происходит перебор записей ассоциативного массива в JavaScript с применением метода entries:</p>
23 for (let value of arr.values()) { console.log(value); }<p>Теперь посмотрим, как происходит перебор записей ассоциативного массива в JavaScript с применением метода entries:</p>
24 for (let pair of arr.entries()) { // pair - это массив [key, values] console.log(pair[0]); // ключ console.log(pair[1]); // значение console.log(`Ключ = ${pair[0]}, значение = ${pair[1]}`); }<p>Этот метод по умолчанию применяется в for...of, поэтому его можно опустить:</p>
24 for (let pair of arr.entries()) { // pair - это массив [key, values] console.log(pair[0]); // ключ console.log(pair[1]); // значение console.log(`Ключ = ${pair[0]}, значение = ${pair[1]}`); }<p>Этот метод по умолчанию применяется в for...of, поэтому его можно опустить:</p>
25 for (let pair of arr) { console.log(`Ключ = ${pair[0]}, значение = ${pair[1]}`); }<p>Вдобавок ко всему, перебрать ассоциативный массив в JavaScript мы можем посредством метода forEach.</p>
25 for (let pair of arr) { console.log(`Ключ = ${pair[0]}, значение = ${pair[1]}`); }<p>Вдобавок ко всему, перебрать ассоциативный массив в JavaScript мы можем посредством метода forEach.</p>
26 arr.forEach(function(value,key) { console.log('key = ' + key +', value = ' + value); });<p>Если нужно преобразовать ассоциативный массив в JSON и назад, подойдёт следующий способ:</p>
26 arr.forEach(function(value,key) { console.log('key = ' + key +', value = ' + value); });<p>Если нужно преобразовать ассоциативный массив в JSON и назад, подойдёт следующий способ:</p>
27 let arr = new Map([ ['question', 'Текст вопроса...'], ['answer1', 'Ответ 1...'], ['answer2', 'Ответ 2...'], ]); // в JSON jsonStr = JSON.stringify([...arr]); // из JSON в Map mapArr = new Map(JSON.parse(jsonStr));<h2>Ассоциативный JavaScript-массив как объект</h2>
27 let arr = new Map([ ['question', 'Текст вопроса...'], ['answer1', 'Ответ 1...'], ['answer2', 'Ответ 2...'], ]); // в JSON jsonStr = JSON.stringify([...arr]); // из JSON в Map mapArr = new Map(JSON.parse(jsonStr));<h2>Ассоциативный JavaScript-массив как объект</h2>
28 <p>В виде ассоциативного массива мы можем использовать и объект.</p>
28 <p>В виде ассоциативного массива мы можем использовать и объект.</p>
29 <p>Для создания пустого ассоциативного массива (объекта) нам подойдёт один из следующих вариантов:</p>
29 <p>Для создания пустого ассоциативного массива (объекта) нам подойдёт один из следующих вариантов:</p>
30 // с помощью литерала объекта var arr = {}; // с помощью стандартной функции-конструктора Object var arr = new Object(); // с помощью Object.create var arr = new Object.create(null);<p>Чтобы заполнить ассоциативный массив в момент его создания, поступаем следующим образом:</p>
30 // с помощью литерала объекта var arr = {}; // с помощью стандартной функции-конструктора Object var arr = new Object(); // с помощью Object.create var arr = new Object.create(null);<p>Чтобы заполнить ассоциативный массив в момент его создания, поступаем следующим образом:</p>
31 var myArray = { "ключ1": "значение1" ,"ключ2": "значение2" , ... }<p>Теперь добавим в наш ассоциативный массив элемент (пару "ключ-значение"):</p>
31 var myArray = { "ключ1": "значение1" ,"ключ2": "значение2" , ... }<p>Теперь добавим в наш ассоциативный массив элемент (пару "ключ-значение"):</p>
32 // добавляем в массив arr строку "текстовое значение", которое связано с ключом "key1" arr["key1"] = "текстовое значение" // добавляем в массив число 22, которое связано с ключом "key2" arr["key2"] = 22;<p>Обратите внимание, что добавление элемента в JavaScript-массив выполнится лишь тогда, когда данного ключа в нём нет. Если ключ уже имеется, то выражение лишь поменяет значение уже существующего ключа.</p>
32 // добавляем в массив arr строку "текстовое значение", которое связано с ключом "key1" arr["key1"] = "текстовое значение" // добавляем в массив число 22, которое связано с ключом "key2" arr["key2"] = 22;<p>Обратите внимание, что добавление элемента в JavaScript-массив выполнится лишь тогда, когда данного ключа в нём нет. Если ключ уже имеется, то выражение лишь поменяет значение уже существующего ключа.</p>
33 <p>В роли значения ключа мы можем использовать любой тип данных, включая объекты. Стоит добавить, что в JavaScript кроме записи с квадратными скобками мы можем использовать точку. Однако это доступно лишь для ключей, имена которых соответствуют правилам именования переменных.</p>
33 <p>В роли значения ключа мы можем использовать любой тип данных, включая объекты. Стоит добавить, что в JavaScript кроме записи с квадратными скобками мы можем использовать точку. Однако это доступно лишь для ключей, имена которых соответствуют правилам именования переменных.</p>
34 arr.key1 = "текстовое значение" arr.key2 = 22;<p>Чтобы получить значение элемента по ключу, подойдёт следующий синтаксис:</p>
34 arr.key1 = "текстовое значение" arr.key2 = 22;<p>Чтобы получить значение элемента по ключу, подойдёт следующий синтаксис:</p>
35 myArray["key1"]; myArray["key2"]; myArray.key1; myArray.key2;<p>Чтобы получить число ключей (длину) ассоциативного массива, поступаем следующим образом:</p>
35 myArray["key1"]; myArray["key2"]; myArray.key1; myArray.key2;<p>Чтобы получить число ключей (длину) ассоциативного массива, поступаем следующим образом:</p>
36 var myArray = { "key1":"value1", "key2":"value2", "key3":"value3"} // 1 - получаем массив ключей посредством метода keys // 2 - применяем свойство length, дабы узнать длину массива Object.keys(myArray).length; // 3<p>Если надо удалить элемент из ассоциативного массива, применяем оператор delete.</p>
36 var myArray = { "key1":"value1", "key2":"value2", "key3":"value3"} // 1 - получаем массив ключей посредством метода keys // 2 - применяем свойство length, дабы узнать длину массива Object.keys(myArray).length; // 3<p>Если надо удалить элемент из ассоциативного массива, применяем оператор delete.</p>
37 <p>Когда нужно проверить, существует ли ключ в нашем ассоциативном массиве:</p>
37 <p>Когда нужно проверить, существует ли ключ в нашем ассоциативном массиве:</p>
38 var myArray = {"key1":"value1", "key2":"value2" }; // 1 способ (задействуем метод hasOwnProperty) if (myArray.hasOwnProperty("key1")) { console.log("Ключ key1 есть!"); } else { console.log("Ключ key1 не существует!"); } // 2 способ if ("key1" in myArray) { console.log("Ключ key1 существует в массиве!"); } else { console.log("Ключ key1 не существует в массиве!"); }<p>Если нужно перебрать элементы ассоциативного массива, подойдёт цикл for...in:</p>
38 var myArray = {"key1":"value1", "key2":"value2" }; // 1 способ (задействуем метод hasOwnProperty) if (myArray.hasOwnProperty("key1")) { console.log("Ключ key1 есть!"); } else { console.log("Ключ key1 не существует!"); } // 2 способ if ("key1" in myArray) { console.log("Ключ key1 существует в массиве!"); } else { console.log("Ключ key1 не существует в массиве!"); }<p>Если нужно перебрать элементы ассоциативного массива, подойдёт цикл for...in:</p>
39 // myArray - ассоциативный массив for(key in myArray) { console.log(key + " = " + myArray[key]); }<p>А чтобы преобразовать ассоциативный JavaScript-массив в JSON и назад, поступаем так:</p>
39 // myArray - ассоциативный массив for(key in myArray) { console.log(key + " = " + myArray[key]); }<p>А чтобы преобразовать ассоциативный JavaScript-массив в JSON и назад, поступаем так:</p>
40 - // Ассоциативный массив (объект) var myArr = { key1: "value1", key2: "value2", key3: "value3" }; // в JSON jsonStr = JSON.stringify(myArr); // из JSON в ассоциативный массив arr = JSON.parse(jsonStr); //получаем значение по ключу key1 (выводим в консоль) console.log(arr.key1);<p>При написании статьи использовались материалы: - "<a>JavaScript - Ассоциативные массивы</a>"; - "<a>Ассоциатвный массив как объект</a>"; - "<a>Настоящие ассоциативные массивы в JavaScript</a>".</p>
40 + // Ассоциативный массив (объект) var myArr = { key1: "value1", key2: "value2", key3: "value3" }; // в JSON jsonStr = JSON.stringify(myArr); // из JSON в ассоциативный массив arr = JSON.parse(jsonStr); //получаем значение по ключу key1 (выводим в консоль) console.log(arr.key1);<p>При написании статьи использовались материалы: - "<a>JavaScript - Ассоциативные массивы</a>"; - "<a>Ассоциативный массив как объект</a>"; - "<a>Настоящие ассоциативные массивы в JavaScript</a>".</p>
41  
41