Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.03.2015, 06:31
Аватар для Alexander Belov
Профессор
Отправить личное сообщение для Alexander Belov Посмотреть профиль Найти все сообщения от Alexander Belov
 
Регистрация: 12.03.2015
Сообщений: 173

Удаление / добавление 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.
Ответить с цитированием
  #2 (permalink)  
Старый 19.03.2015, 07:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 32,188

Сообщение от Alexander Belov
var events = localStorage.getItem('events');
events.splice(1,4);
где превращение строки в массив?
Ответить с цитированием
  #3 (permalink)  
Старый 19.03.2015, 10:30
Аватар для Alexander Belov
Профессор
Отправить личное сообщение для Alexander Belov Посмотреть профиль Найти все сообщения от Alexander Belov
 
Регистрация: 12.03.2015
Сообщений: 173

Сообщение от рони Посмотреть сообщение
где превращение строки в массив?
А разве переменная events не является массивом?

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"}
];
Ответить с цитированием
  #4 (permalink)  
Старый 19.03.2015, 11:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 32,188

Сообщение от Alexander Belov
А разве переменная events не является массивом?
Сообщение от Alexander Belov
var events = localStorage.getItem('events');
пока только строка
Ответить с цитированием
  #5 (permalink)  
Старый 19.03.2015, 11:25
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 32,188

Alexander Belov,
var events = localStorage.getItem('events')||"[]";
    events = JSON.parse(events);
    events.splice(1,4);
Ответить с цитированием
  #6 (permalink)  
Старый 19.03.2015, 22:07
Аватар для Alexander Belov
Профессор
Отправить личное сообщение для Alexander Belov Посмотреть профиль Найти все сообщения от Alexander Belov
 
Регистрация: 12.03.2015
Сообщений: 173

Что-то splice() не работает, массив остаётся как есть без изменений.
Ответить с цитированием
  #7 (permalink)  
Старый 19.03.2015, 22:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 32,188

Alexander Belov,
где код ?
Ответить с цитированием
  #8 (permalink)  
Старый 19.03.2015, 22:30
Аватар для Alexander Belov
Профессор
Отправить личное сообщение для Alexander Belov Посмотреть профиль Найти все сообщения от Alexander Belov
 
Регистрация: 12.03.2015
Сообщений: 173

рони,

Функция добавления события в календарь + удаления первого из них

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, 19.03.2015 в 22:33.
Ответить с цитированием
  #9 (permalink)  
Старый 19.03.2015, 23:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 32,188

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>
Ответить с цитированием
  #10 (permalink)  
Старый 21.03.2015, 21:46
Аватар для Alexander Belov
Профессор
Отправить личное сообщение для Alexander Belov Посмотреть профиль Найти все сообщения от Alexander Belov
 
Регистрация: 12.03.2015
Сообщений: 173

рони,
Благодарю за помощь! Но как переделать функцию не на два события, а на не ограниченное количество? На столько, сколько будет введено пользователем?

+ не понятна запись
events.length >= 2 && (events.length=2)


Почему левая часть без скобок, а правая в скобках? И зачем повторять "равно двум" в обеих частях (в левой "больше либо равно двум", в правой - "равно двум")?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Grid panel Удаление из json serigc Events/DOM/Window 1 17.11.2014 12:23
TinyMCE удаление и добавление новых данных. xTODx Библиотеки/Тулкиты/Фреймворки 4 11.05.2014 17:16
добавление, удаление класса ("мигание") bpystep Общие вопросы Javascript 2 09.08.2013 12:44
Динамическое добавление и удаление одной и тойже вкладки в Ext.tab.Panel potkin ExtJS 2 29.07.2012 15:47
Добавление и удаление полей в форму anoth3r Events/DOM/Window 1 11.09.2009 14:10