@accountnujen

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

Есть файловая БД, которая представляет из себя массив на более 50 записей
{
  "tags": [
    "юр",
    "зозпп",
    "файл",
    "пароль",
    "сервер"
  ],
  "data": [
    {
      "title": "заголовок 1",
      "content": "запись 1",
      "tags": [
        "юр",
        "зозпп"
      ]
    },
    {
      "title": "заголовок 2",
      "content": "запись 2",
      "tags": [
        "юр"
      ]
    },
    {
      "title": "заголовок 3",
      "content": "запись 3",
      "tags": [
        "файл",
        "пароль",
        "сервер"
      ]
    }
  ]
}


каждая запись имеет свои теги. В отдельный массив выведены все теги. Если я удаляю запись 3, то оказывается, что эти теги больше не используются. Как быть в данном случае?

Вариант в лоб: проверить все записи на наличие этих тегов по отдельности. Если ничего не найдено - удалить. Вариант не элегантный, но рабочий. Хотелось бы у специалистов услышать более красивые варианты решения
  • Вопрос задан
  • 85 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
Зайдите с другой стороны - вместо удаления того, чего больше нет, получите то, что есть, и замените массив:

tags = Array.from(new Set(data.flatMap(n => n.tags)));

Если массив по какой-то причине заменять нельзя, тогда удалите все элементы из существующего и запишите новые:

tags.splice(0, tags.length, ...new Set(data.flatMap(n => n.tags)));
Ответ написан
Комментировать
Aetae
@Aetae Куратор тега JavaScript
Тлен
В таком виде оптимально это никак не сделать, только с полным перебором записей каждый божий раз, как предлагает 0xD34F.

Оптимальнее же сделать можно изменив структуру на:
{
  "tags": {
    "юр": 2,
    "зозпп": 1,
    "файл": 1,
    "пароль": 1,
    "сервер": 1
  },
  "data": [
    {
      "title": "заголовок 1",
      "content": "запись 1",
      "tags": [
        "юр",
        "зозпп"
      ]
    },
    {
      "title": "заголовок 2",
      "content": "запись 2",
      "tags": [
        "юр"
      ]
    },
    {
      "title": "заголовок 3",
      "content": "запись 3",
      "tags": [
        "файл",
        "пароль",
        "сервер"
      ]
    }
  ]
}

Тогда при добавлении записи просто плюсуете количество использований тэга, при удалении минусуете. Если стало 0 - удаляете.

Хотя, конечно, если всё это на простых файликах и всё равно грузится в память - смысла слишком оптимизировать тут никакого нет.:)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы