Именованные элементы массива?

Скриншот с наглядным примером о том о чем я хочу узнать

Недавно наткнулся в консоли на массив, у которого наряду с нумерованными элементами есть именованные свойства как у объекта, при изучении JS, я не сталкивался с подобным, и всегда думал, что массив может иметь только нумерованные поля(на скрине видно что длина массива считается именно только по колличеству нумерованных элементов).

Объясните пожалуйста, что означают выделенные именованные свойства и как можно создать такой массив


Ответы (2 шт):

Автор решения: Anton Shchyrov

В Javascript массивы - это объекты класса Array. А любому объекту можно установить произвольные свойства

const arr = [1, 2, 3];
arr.field1 = 'ABC';
arr.field2 = 42;
console.log(arr);
→ Ссылка
Автор решения: Crus

Это называется "Ассоциативные массивы"

Все в js - это примитивы (boolean, null, undefined, bigint, number, string, и symbol) и объекты (все остальное). Если мы сделаем typeof на массив, то получим object.

Например, мы можем создать коллекцию Map, которая сделаем нам ассоциативный массив.

const arr = new Map([
  ['key1', 'value1'],
  ['key2', 'value2'],
  ['key3', 'value3']
]);

console.log(arr)


Но исходя из того, что все в js это object, мы можем создать новый стандратный массив и подобно обьекту записать в него свойство

let arr = [ 0, 1, 2, 3 ];

arr["string"] = 'test'
arr.string2 = 'test2'

console.log(arr)

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

[0, 1, 2, 3, string: 'test', string2: "test2"]
0: 0
1: 1
2: 2
3: 3
string: "test"
string2: "test2"
→ Ссылка