Есть массив
let places = {};
Пытаюсь добавить к определённому ключу в конец его значений, новое:
places[carriage].push('key2_value3');
Но пишет ошибку - places[carriage].push is not a function
let places = {} это литерал объекта.
let places = [] вот это новый пустой массив.
При использовании метода push() не нужно указывать индекс массива. Этот метод сам вставит элемент в конец массива.
Так что ваш пример будет выглядеть как-то так:
let places = [];
places.push('key2_value3');
Если вам нужно создать объект, у которого будут пары ключ/значение, тогда да. Нужно будет сделать примерно так.
let places = {};
places.carriage = 'value';
Через точку мы можем добавлять новые поля в объект и присваивать им значения. Если поле вашего объекта должно быть массивом, то сначала его нужно определить.
let places = {};
places.carriage = [];
places.carriage.push('new value');
places.carriage.push('new value'); // добавим ещё один элемент в массив
places.newField = []; // второй ключ-массив
places.newField.push('anothe value');
places.newField.push('anothe value 2');
let otherKey = 'other';
places[otherKey] = [];
places[otherKey].push('other');
console.log(places)
Объект {} в javasctipt представлен ассоциативным массивом, но его не принято называть массивом, его принято называть Объектом.
Вероятно ваш вопрос возник потому что Вы были знакомы с этой структурой данных раньше чем начали изучать javascript.
Когда в javascript идет речь про массив имеется в виду Array() или []
И следуя Вашей логике работы с объектом вы вероятно хотели нечто такое
let places = {};
// тут я предположил что carriage это все таки строка а не переменная
push('carriage1', 'key2_value3');
push('carriage1', 'key2_value4');
push('carriage2', 'key2_value1');
push('carriage2', 'key2_value2');
function push(key, value){
// проверяем наличие ключа в объекте
if (!places[key]) {
// если его нет присваиваем значению ключа новый пустой массив
places[key] = [];
}
// теперь можно смело добавлять элементы в массив,
// который лежит в объекте под ключом значение которого передано через переменну `key`
places[key].push(value)
}
console.log(places)
Коротко это можно записать вот так:
let places = {};
let push = (a, b) => (places[a] || (places[a] = [])).push(b);
push('carriage1', 'key2_value3');
push('carriage1', 'key2_value4');
console.log(places)
Продвижение своими сайтами как стратегия роста и независимости