Spokik
@Spokik
дилетант ;)

Как правильно структурировать данные для последующей работы?

Я пишу скрипт (user.js) для себя, для своей работы. Сначала сделал разное автозаполнение/ шаблоны, а сейчас хочу собирать данные и делать по ним отчет вида:

3 состав:
01.08 - 13шт
02.08 - 27
03.08 - 17

6 состав:
01.08 - 18
02.08 - 22
03.08 - 32

Я загружаю файлы на сайт, у каждого файла на сайте есть ID вида "23a326bd-180c-462a-94a7-d87561d0e88d" который я получаю из DOM .
Так же у каждого файла есть "состав" по каждому из которых и нужно сделать отчет.
третий обязательный параметр у файла - число/ дата

Сохранять я хочу все это дело в localStorage в виде объекта через JSON.stringify()

В идеале конечный результат - это возможность получить по каждому составу табличку, в которой по дням написано кол-во загруженных файлов. Написать ее я конечно смогу, а вот как найти данные правильно не понимаю

У меня получаются вот такие записи в localStorage:
key: sostav4
value:
{ 
    "he0075cf-5b2e-42df-a2e0-950ed30146a8": { "date": "1.7", "a40": "А40-135540/2020\n" }, 
    "9d0075cf-5b2e-42df-a2e0-950ed30146a8": { "date": "7.7", "a40": "А40-135540/2020\n" }, 
    "72766e78-1f72-4814-a2c4-69941d4045c3": { "date": "8.8", "a40": "А40-135423/2020\n" }, 
    "0c579c38-d494-4640-9199-595c9fba7868": { "date": "8.8", "a40": "А40-136106/2020\n" } 
}

Соответственно тут по примеру должно быть
4 состав:
01.01 - 1
07.08 - 1
08.08 - 2

Вот часть скрипта что добавляет записи:

let checker = setInterval(() => {
            let saveScanStat = document.querySelector("#b-container > div.b-popup-wrapper.js-popup-wrapper.js-popup-wrapper--upload > div.b-popup.b-popup--blue.b-popup--upload.js-popup--upload.b-popup--edit.js-popup--edit > form > div.b-popup-button.js-upload-submit")// кнопка по которой срабатывает скрипт
            let q = document.querySelector("#chrono_list_content > div.b-chrono-items-container.js-chrono-items-container > div").childElementCount - 2 //Номер определения сверху дива (бывает разныей, зависит от кол-ва доков загруженных после определения)
            let sostav = document.querySelector("#chrono_list_content > div.b-chrono-items-container.js-chrono-items-container > div > div:nth-child(" + q + ") > div.r-col > h2 > span > p:nth-child(1)").textContent.split(" ")[54]
            let docId = document.querySelector("#b-container > div.b-popup-wrapper.js-popup-wrapper.js-popup-wrapper--upload > div.b-popup.b-popup--blue.b-popup--upload.js-popup--upload.b-popup--edit.js-popup--edit > form > input[type=hidden]:nth-child(4)").value
            let a40 = document.querySelector("#b-case-header > ul.crumb.g-ec > li > span").textContent.split(" ")[20]


            //Срабатывает прии НАЖАТИИ на "Сохранить"
            saveScanStat.onclick = () => {
                let now = new Date()
                let dataForLS = JSON.parse(localStorage.getItem(`sostav${sostav}`))

                dataForLS[docId] = {
                    date: `${now.getDate()}.${1 + now.getMonth()}`,
                    a40: `${a40}`
                }

                localStorage.setItem(`sostav${sostav}`, JSON.stringify(dataForLS))

                alert(`Мы записали в ${sostav} состав ${docId} id и ${a40} номер дела `)
            }
        }, 500)
        checker()



Вот собственно как искать по объекту с объектами или как-то переписать структуру хранения данных?
Мне немного стыдно за свой код, не ругайте пожалуйста, я самоучка, только видюшки и что-то в интернетах.
  • Вопрос задан
  • 54 просмотра
Решения вопроса 1
Spokik
@Spokik Автор вопроса
дилетант ;)
решил
Вот так сохраняю
saveScanStat.onclick = () => {
                let now = new Date()
                let dataForLS = {}
                dataForLS = JSON.parse(localStorage.getItem(`sostav${sostav}`))
                if (dataForLS == null) {
                    dataForLS = {}
                }
                dataForLS[docId] = {
                    day: `${now.getDate()}`,
                    month: `${1 + now.getMonth()}`,
                    a40: `${a40}`
                }

                localStorage.setItem(`sostav${sostav}`, JSON.stringify(dataForLS))
            }


Вот так читаю
let dataForLS = {}
                let sostavNumber = document.querySelector("#b-footer > div > div:nth-child(2) > input:nth-child(2)").value
                dataForLS = JSON.parse(localStorage.getItem(`sostav${sostavNumber}`))
                let counter = {}
                let needMonth = Number(document.querySelector("#month").value.substr(5, 7))
                for (let key in dataForLS) {

                    if (dataForLS[key].month == needMonth) {
                        if (counter[dataForLS[key].day] == null) {
                            counter[dataForLS[key].day] = 0
                        }
                        counter[dataForLS[key].day]++
                    }

                }
                console.log(counter);
            }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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