Как правильно сформировать ассоциативный массив и отсортировать по значению?

Доброго времени суток. У меня есть данные такого вида:

Массив 1:
Андрей, Алексей, Сергей, Антон, Матвей, Роман, Руслан
Массив 2:
27, 22, 38,45,51,42,19

Я хочу создать ассоциативный массив с ключом: Андрей и значением 27 и так для всех элементов. Другими словами: Собрать в один массив: ключ => имя, значение => возраст.
Делаю так:
totalArray = [];
totalArray .push( { [name] : age } );

На выходе получаю такие данные в консоли:

[]
0: {Андрей: 27}
1: {Алексей: 22}
2: {Сергей: 38}
3: {Антон: 45}
4: {Матвей: 51}
5: {Роман: 42}
6: {Руслан: 19}

Не пойму как обратиться к этим элементам по ключу например, вот таким образом пишет undefined
totalArray[0]['Алексей']

И второй вопрос, я хочу в итоге отсортировать этот массив по его значению (второму элементу). Как это сделать ? Спасибо за помощь.
  • Вопрос задан
  • 184 просмотра
Решения вопроса 4
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
В js нет никаких "ассоциативных массивов", есть только объекты.
const total = {};

...
total[name] = age;
...

console.log(total.Алексей);


я хочу в итоге отсортировать этот массив по его значению (второму элементу)
Превратить объект в массив можно с помощью Object.entries(), а дальше уже сортируйте как хотите.
Ответ написан
Seasle
@Seasle Куратор тега JavaScript
const arr1 = ['Андрей', 'Алексей', 'Сергей', 'Антон', 'Матвей', 'Роман', 'Руслан'];
const arr2 = [27, 22, 38, 45, 51, 42, 19];

const data = Object.fromEntries(
	Array.from({ length: Math.min(arr1.length, arr2.length) }, (_, i) => [arr1[i], arr2[i]])
);

или так
const zip = (...arrays) => {
    const count = arrays.length;
    return Array.from(
        { length: Math.min(...arrays.map((array) => array.length)) },
        (_, i) => Array.from({ length: count }, (_, j) => arrays[j][i])
    );
};

const arr1 = ['Андрей', 'Алексей', 'Сергей', 'Антон', 'Матвей', 'Роман', 'Руслан'];
const arr2 = [27, 22, 38, 45, 51, 42, 19];

const data = Object.fromEntries(zip(arr1, arr2));
const sortedData = Object.fromEntries(zip(arr1, arr2).sort((a, b) => a[1] - b[1]));
console.log(sortedData); // {Руслан: 19, Алексей: 22, Андрей: 27, Сергей: 38, Роман: 42,…}
Ответ написан
Комментировать
ProgrammerForever
@ProgrammerForever
Учитель, автоэлектрик, программист, музыкант
let array1 = ["Андрей", "Алексей", "Сергей", "Антон", "Матвей", "Роман", "Руслан"];
let array2 = [27, 22, 38, 45, 51, 42, 19];

let totalData = array1.map((_,i)=>[array1[i], array2[i]]);
let obj = Object.fromEntries(totalData);


Отсортировать объект не получится - это хэш-таблица по сути. Или же делать наоборот: ключами сделать значения, получить Object.keys(), отсортировать, и потом по ним пройтись, получая значения из объекта.
Ответ написан
Комментировать
@WAR_VIK
Если я правильно понял условие Вашей задачи, то можно сделать так:
let arr = ['Андрей', 'Алексей', 'Сергей', 'Антон', 'Матвей', 'Роман', 'Руслан'];
let arr2 = [27, 22, 38, 45, 51, 42, 19];
let res = [];
arr.map((el, i) => [arr[i], arr2[i]]).sort((min, max) => min[1] - max[1]).map(el => {
       let ob = {};
       ob[el[0]] = el[1];
       res.push(ob);
});
console.log(res);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы