Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.11.2020, 11:25
Новичок на форуме
Отправить личное сообщение для alex_wm Посмотреть профиль Найти все сообщения от alex_wm
 
Регистрация: 27.11.2020
Сообщений: 7

Добавление элементов в массив
Привет, подскажите, будьте любезны)
Хочу добавлять элементы в массив при каждом клике, при этом чтобы к элементу автоматически подставлялся ключ 1, 2, 3..

var arr = {};
var id = 1;
$('button').click(function() {
    var item = {};
    item['name'] = 'имя';
    item['image'] = 'изображение';
    arr = {id: item};
    id++;
});


Такая конструкция не срабатывает. Строится массив вида:

id:{name:имя, image: изображение}

а элементы не добавляются, а перезаписываются. Переменная массива id в массиве не читается как переменная. Заранее спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 27.11.2020, 11:46
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

arr = {[id]: item};
Ответить с цитированием
  #3 (permalink)  
Старый 27.11.2020, 12:17
Новичок на форуме
Отправить личное сообщение для alex_wm Посмотреть профиль Найти все сообщения от alex_wm
 
Регистрация: 27.11.2020
Сообщений: 7

Большое спасибо
Ответить с цитированием
  #4 (permalink)  
Старый 27.11.2020, 12:29
Новичок на форуме
Отправить личное сообщение для alex_wm Посмотреть профиль Найти все сообщения от alex_wm
 
Регистрация: 27.11.2020
Сообщений: 7

Еще вопрос, хочу данный массив записать в local storage. Как вычислять последний ключ массива для того чтобы добавлять уникальное значение ключа?

var arr = {};
if(!isEmpty(localStorage.getItem('arr')) {
    var id = 1;
} else {
    // var id = ???
}
$('button').click(function() {
    var item = {};
    item['name'] = 'имя';
    item['image'] = 'изображение';
    arr = {[id]: item};
    localStorage.setItem('arr', JSON.stringify(arr));
    id++;
});
Ответить с цитированием
  #5 (permalink)  
Старый 27.11.2020, 12:41
Новичок на форуме
Отправить личное сообщение для alex_wm Посмотреть профиль Найти все сообщения от alex_wm
 
Регистрация: 27.11.2020
Сообщений: 7

И еще - элемент новый не добавляется а перезаписывается
Ответить с цитированием
  #6 (permalink)  
Старый 27.11.2020, 12:45
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Math.max(...Object.keys(JSON.parse(localStorage.getItem('arr'))))+1


А как добавлять, если arr = {} всегда?

Последний раз редактировалось laimas, 27.11.2020 в 13:08.
Ответить с цитированием
  #7 (permalink)  
Старый 27.11.2020, 13:35
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от alex_wm
не добавляется а перезаписывается
arr = {[id]: item};

arr[id] = item;
Ответить с цитированием
  #8 (permalink)  
Старый 27.11.2020, 14:05
Новичок на форуме
Отправить личное сообщение для alex_wm Посмотреть профиль Найти все сообщения от alex_wm
 
Регистрация: 27.11.2020
Сообщений: 7

Сообщение от laimas Посмотреть сообщение
arr = {[id]: item};

arr[id] = item;
Такая конструкция не работает
Выдает ошибку
Uncaught TypeError: Cannot set property '2' of null
Ответить с цитированием
  #9 (permalink)  
Старый 27.11.2020, 14:12
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

<button>Add</button>
<pre></pre>
<script>
var arr = {}, id = 0;

document.querySelector('button').addEventListener('click', function() {
    var item = {time: Date.now()}
    arr[++id] = item;
    document.querySelector('pre').textContent = JSON.stringify(arr, null, '\t')
});
</script>


Работает? Что-то вы не так делаете.
Ответить с цитированием
  #10 (permalink)  
Старый 27.11.2020, 14:50
Новичок на форуме
Отправить личное сообщение для alex_wm Посмотреть профиль Найти все сообщения от alex_wm
 
Регистрация: 27.11.2020
Сообщений: 7

Сообщение от laimas Посмотреть сообщение
[HTML run]<button>Add</button>
arr[++id] = item;
Я понял, такая конструкция работает только когда массив не пуст. Когда пуст - соответственно выдает ошибку
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Авто добавление элементов в массив js Амай Общие вопросы Javascript 7 29.02.2020 21:57
Добавление объекта в массив в цикле Dark19 Элементы интерфейса 3 11.12.2016 23:11
Массив из элементов другого массива, взятых в случайном порядке Basil_JS Общие вопросы Javascript 6 12.04.2015 13:07
Удалить и вернуть массив из удаленных элементов splice Paulyyy Общие вопросы Javascript 15 29.05.2013 15:36
Упорядочить заданный числовой массив X (M) в порядке убывания значений его элементов. Drimmer Серверные языки и технологии 0 02.07.2012 18:22