Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Добавление элементов в массив (https://javascript.ru/forum/events/81441-dobavlenie-ehlementov-v-massiv.html)

alex_wm 27.11.2020 11:25

Добавление элементов в массив
 
Привет, подскажите, будьте любезны)
Хочу добавлять элементы в массив при каждом клике, при этом чтобы к элементу автоматически подставлялся ключ 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 в массиве не читается как переменная. Заранее спасибо.

laimas 27.11.2020 11:46

arr = {[id]: item};

alex_wm 27.11.2020 12:17

Большое спасибо :dance: :dance: :dance:

alex_wm 27.11.2020 12:29

Еще вопрос, хочу данный массив записать в 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++;
});

alex_wm 27.11.2020 12:41

И еще - элемент новый не добавляется а перезаписывается

laimas 27.11.2020 12:45

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


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

laimas 27.11.2020 13:35

Цитата:

Сообщение от alex_wm
не добавляется а перезаписывается

arr = {[id]: item};

arr[id] = item;

alex_wm 27.11.2020 14:05

Цитата:

Сообщение от laimas (Сообщение 531207)
arr = {[id]: item};

arr[id] = item;

Такая конструкция не работает
Выдает ошибку
Uncaught TypeError: Cannot set property '2' of null

laimas 27.11.2020 14:12

<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>


Работает? Что-то вы не так делаете.

alex_wm 27.11.2020 14:50

Цитата:

Сообщение от laimas (Сообщение 531209)
[HTML run]<button>Add</button>
arr[++id] = item;

Я понял, такая конструкция работает только когда массив не пуст. Когда пуст - соответственно выдает ошибку


Часовой пояс GMT +3, время: 21:37.