Задать вопрос
@accountnujen

Как должна выглядеть структура json, которую можно выводить с конц, можно обращаться по номеру и удалять?

{
  "tags": {
    "юр": [1,0],
    "зозпп": [0],
    "oracle": [2],
  },
  "data": [
    {
      "title": "Заголовок 1",
      "content": "Запись 1",
      "tags": [
        "юр",
        "зозпп"
      ]
    },
    {
      "title": "Заголовок 2",
      "content": "Запись 2",
      "tags": [
        "юр"
      ]
    },
    {
      "title": "Заголовок 3",
      "content": "Запись 3",
      "tags": [
        "oracle",
      ]
    }
  ]
}


Есть вот такой json. Я делаю его parseJSON.
И вот такие операции я хочу совершать:
  • Выводить все записи data, но в обратном порядке (начиная с последних)
  • Добавлять запись в конец этого объектомассива
  • Обращаться к записи по id.
  • выводить все записи по тегу
  • Удалять запись, используя его id


К примеру вывод записи в обратном порядке я делаю вот так:
jsonara.data.reverse();
viewContent(jsonara.data);
jsonara.data.reverse();

Зачем второй раз делаю реверс? Потому что после вывода есть вероятность, что будет добавлена новая запись. И как оказалось сделать дважды реверс быстрее, чем хранить 2 массива в обратном и прямом порядке или делать unshift (скорость последнего вообще на уровне *sarcasm*)

Обращаться по ID я могу без проблем до тех пор пока не появляется вопрос удаления записи. Если я делаю .splice, то у меня теряется порядок этих записей. В этом случае меня спасёт объект и тогда у меня будет "1":{...},"2":{...},"3":{...}, НО в этом случае я не могу доставать записи в обратном порядке, потому что мне придётся переводить это всё в массив, а затем обратно в объект, чтобы сохранить в json, что очень ресурсоёмко.

Что делать?
  • Вопрос задан
  • 131 просмотр
Подписаться 1 Простой 9 комментариев
Пригласить эксперта
Ответы на вопрос 1
sandersrocket
@sandersrocket
programmer
const reversedData = jsonData.data.reverse();
console.log(reversedData);
// добавление новой записи
const newEntry = {
   "id": 1,
  "title": "Новый заголовок",
  "content": "Новая запись",
  "tags": ["юр", "новый_тег"]
};

jsonData.data.push(newEntry);
console.log(jsonData.data);

// поиск по тегам
function getEntriesByTag(tag) {
  return jsonData.data.filter(entry => entry.tags.includes(tag));
}

const tag = "юр";
const entriesWithTag = getEntriesByTag(tag);
console.log(entriesWithTag);
// удаление по index, но учти, что это index записи, пример правильный записи выше, и правильно тебе сказали выше, что нужно хранить id в самой записи
function deleteEntryById(id) {
  const indexToDelete = jsonData.data.findIndex(entry => entry.id === id);
  if (indexToDelete !== -1) {
    jsonData.data.splice(indexToDelete, 1);
  }
}

const idToDelete = 1; 
deleteEntryById(idToDelete);
console.log(jsonData.data);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы