Удаление / добавление JSON
Есть динамический календарь с событиями, которые записаны в виде JSON и также хранятся в localStorage:
var events = [ {"Date":"16-3-2015", "Event":"MeetUp", "Participants":"Me, Tom, Linda", "Description":"Coding meet-up, California, Santa Barbara"}, {"Date":"16-3-2015", "Event":"Vehicle testing", "Participants":"Me", "Description":"BMW test drive"} ]; Не получается реализовать следующее: 1) На примере выше мы видим, что дата одна и та же. Но по задумке может быть только одно событие в один день. На практике выходит так, что в JSON и localStorage запиcываются оба события, но на экран пользователя выводится то, которое было записанно позднее. Каким образом удалить первое событие из JSON и localStorage? Пробовал var events = localStorage.getItem('events'); events.splice(1,4); console выдаёт Undefined is not a function 2) И каким образом реализовать изменение лишь одного из свойств объекта? Например, пользователь решил добавить в "Description" ещё некоторую информацию, не меняя остальные свойства "Date", "Event", "Participants". По идее, нужно каким-то образом отследить изменение текста, который вводится пользователем. if ("новый текст, который вводится пользователем" !== "тексту, сохранённому в localStorage") { "меняем его в JSON и сохраняем наверх предыдущего localStorage" } else { "всё ОК, ничего не меняем" }; Подскажите, пожалуйста, как решить такие задачи при помощи нативного Javascript. |
Цитата:
|
Цитата:
var events = [ {"Date":"16-3-2015", "Event":"MeetUp", "Participants":"Me, Tom, Linda", "Description":"Coding meet-up, California, Santa Barbara"}, {"Date":"16-3-2015", "Event":"Vehicle testing", "Participants":"Me", "Description":"BMW test drive"} ]; |
Цитата:
Цитата:
|
Alexander Belov,
var events = localStorage.getItem('events')||"[]"; events = JSON.parse(events); events.splice(1,4); |
Что-то splice() не работает, массив остаётся как есть без изменений.
|
Alexander Belov,
где код ? |
рони,
Функция добавления события в календарь + удаления первого из них var addNewEvent = function() { var events = JSON.parse(localStorage.getItem('events')) || []; events.push({Date: storageNewDate, Event: storageEvent, Participants: storageParticipants, Description: storageDescription}); localStorage.setItem('events', JSON.stringify(events)); }; var events = localStorage.getItem('events')||"[]"; console.log(events); events = JSON.parse(events); events.splice(1,4); События в календаре, сохранённые и выведенные в localStorage (не меняются в не зависимости от добавления строчек 9-12 вышенаписанного кода) [{ "Date":"16-3-2015", "Event":"MeetUp", "Participants":"Me, Tom, Linda", "Description":"Coding meet-up, California, Santa Barbara" }, { "Date":"16-3-2015", "Event":"Vehicle testing", "Participants":"Me", "Description":"BMW test driive" }] Функция addNewEvent срабатывает по нажатию на кнопку. |
Alexander Belov,
для медитации <!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> </head> <body> <script> var addNewEvent = function(storageNewDate,storageEvent,storageParticipants,storageDescription) { var events = JSON.parse(localStorage.getItem('events'))||[] ; events.length >= 2 && (events.length=2) //чтоб не разрастался при тесте //тут должна быть проверка есть ли в массиве storageNewDate for (var i=0; i<events.length; i++) {if(events[i].Date == storageNewDate) {alert('было')}} events.push({"Date": storageNewDate, "Event": storageEvent, "Participants": storageParticipants, "Description": storageDescription}); localStorage.setItem('events', JSON.stringify(events)); }; addNewEvent(1,2,3,4) ; //добавили addNewEvent(5,6,7,8) ; document.write(localStorage.getItem('events')+'set<br>') addNewEvent(1,15,15,15) ; //тест на Date var events = JSON.parse(localStorage.getItem('events'))||[] ; events.splice(0,1); //удалили нулевой элемент localStorage.setItem('events', JSON.stringify(events)); document.write(JSON.stringify(events)+"remove") </script> </body> </html> |
рони,
Благодарю за помощь! Но как переделать функцию не на два события, а на не ограниченное количество? На столько, сколько будет введено пользователем? + не понятна запись events.length >= 2 && (events.length=2) Почему левая часть без скобок, а правая в скобках? И зачем повторять "равно двум" в обеих частях (в левой "больше либо равно двум", в правой - "равно двум")? |
Цитата:
if (events.length >= 2 ) {events.length=2} так понятнее ? и эта строка служебная вам ненужна Цитата:
вашей информации недостаточно чтоб сделать полноценную функцию и похоже вам в раздел работа. |
Теперь понятно.
Буду искать решение. |
Помогите, пожалуйста, разобраться в ситуации.
Ниже написан код, которые добавляет объекты в localStorage при условии, что в самом хранилище уже что-то есть. Если там ничего нет, - в коде это строка if (myStorage.length == 0) {}; (тестирую, очистив предварительно localStorage), - то консоль выдаёт ошибку Uncaught SyntaxError: Unexpected end of input. Интересует: 1) Почему строка с переменной var events = localStorage.getItem('events') || []; не определяет пустой массив, если в localStorage ещё нет 'events'? 2) Как создать и прописать условие для if (myStorage.length == 0) {}; чтобы там создавался в localStorage пустой массив, если нет ещё сохранённых данных. Оставил в коде специально пустое место после фигурных скобок. Пробовал: 1) var myStorage = []; 2) var myStorage = myStorage.push({Date: "", Event: "", Participants: "", Description: ""}); localStorage.setItem('myStorage', JSON.stringify(myStorage)); P.S. Важная часть начинается с var events... if (tdAttr) { tdAttr.style.backgroundColor = 'green'; tdAttr.getElementsByTagName("span")[0].innerHTML = fastAddEvent.value; var fastDate = tdAttr.getAttribute('data-cell'); var fastEvent = fastAddEvent.value; var events = localStorage.getItem('events') || []; var addFastEvent = function() { var myStorage = JSON.parse(events); if (myStorage.length == 0) { } else if (myStorage.length > 0) { for (var i = 0; i < myStorage.length; i++) { if (myStorage[i].Date == fastDate) { myStorage[i].Event = fastEvent; myStorage[i].Participants = ""; myStorage[i].Description = ""; }; break; }; }; localStorage.setItem('events', JSON.stringify(myStorage)); }; addFastEvent(); }; |
Alexander Belov,
строка 10 где кавычки потеряли? "[]" |
Цитата:
У меня аналогичный коды выше. Там потом в такую же переменную добавляются события посредством events.push({Date: storageNewDate, Event: storageEvent, Participants: storageParticipants, Description: storageDescription}); Т.е., в объект мы передаём значения. И там была так же объявлена переменная: var events = JSON.parse(localStorage.getItem('events')) || []; Если там скобки взять в кавычки, то метод push() не будет работать. |
Alexander Belov,
вы запутались либо var events = JSON.parse(localStorage.getItem('events')) || []; тут кавычки ненужны либо var events = localStorage.getItem('events') || "[]"; var myStorage = JSON.parse(events); здесь без кавычек никак |
Благодарю за помощь!
Плюсы не могу ставить вам в карму временно. |
Часовой пояс GMT +3, время: 08:11. |