Есть массив
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)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
У меня есть две функции, которые показывают / скрывают элементы за счет манипуляции классами и css переходами:
Коллеги подскажите на JS(или на чистом css возможно) при помощи чего можно реализовать подобное решение https://wwwkikk
Сделал всё как в этой статье https://hackernooncom/how-to-build-a-react-project-from-scratch-using-webpack-4-and-babel-56d4a26afd32, но всегда по ходу выполнения всплывала вот эта ошибка:
Как сделать, чтобы webstorm смотрел на babel config? Нужно из babel вытянуть alias, чтобы при импорте файлов можно было через Ctrl переходить в файлБез использования...