У меня есть объект, который содержит предупреждения и некоторую информацию о них:
var alerts = {
1: { app: 'helloworld', message: 'message' },
2: { app: 'helloagain', message: 'another message' }
}
В дополнение к этому у меня есть переменная, которая сообщает, сколько существует предупреждений alertNo
. У меня вопрос: когда я иду, чтобы добавить новое предупреждение, есть ли способ добавить предупреждение на alerts
объект?
javascript
Стив Гаттузо
источник
источник
Ответы:
Как насчет хранения предупреждений в виде записей в массиве вместо свойств одного объекта?
А затем, чтобы добавить один, просто используйте
push
:источник
alerts[3] = { app: 'hello3', message: 'message 3' }
. При этом вы можете получить доступ сообщения по идентификатору:alerts[2] => { app: 'helloworld', message: 'message' }
. Получение длины затем просто:Object.keys(alerts).length
(этот бит является проще с массивами)jQuery
$.extend(obj1, obj2)
объединит 2 объекта для вас, но вы действительно должны использовать массив.источник
Вы можете сделать это с Object.assign () . Иногда вам нужен массив, но при работе с функциями, которые ожидают один объект JSON - например, вызов OData - я обнаружил, что этот метод проще, чем создание массива только для его распаковки.
РЕДАКТИРОВАТЬ: Чтобы обратиться к комментарию относительно получения следующего ключа, вы можете получить массив ключей с помощью функции Object.keys () - см. Ответ Вади для примера увеличения ключа. Точно так же вы можете получить все значения с помощью пары Object.values () и ключ-значение с помощью Object.entries () .
источник
Как и в других ответах, вам может быть проще работать с массивом.
Если не:
попытайся:
https://jsbin.com/yogimo/edit?js,console
источник
while(alerts[size]) size++;
И, возможно, переименоватьsize
вnewId
.Вы можете использовать синтаксис распространения следующим образом.
источник
Теперь с ES6 у нас есть очень мощный оператор распространения (... Object), который может сделать эту работу очень простой. Это можно сделать следующим образом:
Это оно. Это добавит ключ, который вы хотите. Надеюсь это поможет!!
источник
Вы действительно должны использовать массив предупреждений, но в противном случае добавление к указанному вами объекту будет выглядеть так:
Но так как вы не должны использовать буквенные числа, поскольку имена заключают в кавычки все и идут с
или вы можете сделать его массивом объектов.
Доступ это выглядит как
источник
У вас есть возможность изменить внешнюю структуру на массив? Так бы это выглядело так
Поэтому, когда вам нужно было добавить один, вы можете просто вставить его в массив
Затем у вас есть встроенный нулевой индекс для перечисления ошибок.
источник
Гораздо проще с ES6:
источник
В качестве альтернативы в ES6 может использоваться расширенный синтаксис.
${Object.keys(alerts).length + 1}
возвращаетсяid
для предупрежденияисточник
Извините, но я не могу комментировать ваши ответы уже из-за моей репутации! ... поэтому, если вы хотите изменить структуру вашего объекта, вы должны делать то, что говорит Тейн Пламмер, но небольшой трюк, если вам все равно, где поставить элемент: он будет вставлен в первую позицию, если вы не укажете номер для вставки.
Это замечательно, если вы хотите передать объект Json, например, в вызов функции mongoDB и вставить новый ключ в условия, которые вы получаете. В этом случае я собираюсь вставить элемент myUid с некоторой информацией из переменной внутри моего кода:
источник
[Javascript] После небольшой покерной игры, это сработало для меня:
Проблема, которую мне нужно было решить, заключалась в том, что у меня может быть любое количество событий, и все они будут иметь одно и то же имя: LastPostedDateTime. Все, что отличается, это дата и время.
источник
Попробуй это:
Работает довольно хорошо, он добавит его в начало массива.
источник