Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   тип данных как таблица (БД) (https://javascript.ru/forum/misc/83282-tip-dannykh-kak-tablica-bd.html)

awp 09.11.2021 00:11

тип данных как таблица (БД)
 
Привет всем.
Изучаю JS - пытаюсь спрыгнуть с 1С.
Переписываю задачи с 1С на JS и хочу понять какой тип данных или связку типов вы используете когда необходим тип как таблица(как в БД).
Я сделал так:
for (let index = 1; index < period; index++) {
    graph[index] = {
    date: dateStart.setMonth(dateStart.getMonth() + 1),
    sum: graph[index - 1].sum - graph[index -1].telo,
    telo: olSumR / period,
    com: olSumR / period * (pr/100),
    allP: olSumR / period + (olSumR / period * (pr/100))
  }


Как еще можно сделать или как правильно? И как получить итог например по "allP" - суммировать в отдельную переменную в цикле?

GuardCat 09.11.2021 09:33

Наверное, вам подойдёт массив объектов:

let db = [
  {date: "somedate", value: "somevalue"},
  {date: "somedate", value: "somevalue"}
]


И стоит изучить методы массивов: filter, reduce, forEach, map и т.д. Как раз для суммирования подойдёт reduce.

voraa 09.11.2021 09:54

for (let index = 1; index < period; index++) {
    graph[index] = {
    date: dateStart.setMonth(dateStart.getMonth() + 1),
    sum: graph[index - 1].sum - graph[index -1].telo,
    telo: olSumR / period,
    com: olSumR / period * (pr/100),
    allP: olSumR / period + (olSumR / period * (pr/100))
  }

Непонятно, что у вас dateStart, olSumR...
Не видно, что бы они менялись.
Значит telo, com, allP будут везде одинаковые.
Как устанавливаются значения для graph[0]?

Вот это ошибка, если date должно быть датой, а не числом миллисекунд:
date: dateStart.setMonth(dateStart.getMonth() + 1),

setMonth устанавливает значение в объекте Date с которым она вызвана. Новый объект не создается. Т.е каждый раз будет меняться dateStart, все поля date будут ссылаться на него. Т.е. date у всего массива будет одинаковая.
Надо так

date: new Date(dateStart.getTime().setMonth(dateStart.getMonth() + 1))

Суммировать с помощью reduce

let sum = graph.reduce ((a, g) => a+g.allP, 0)

awp 09.11.2021 12:00

Спасибо.


Часовой пояс GMT +3, время: 09:46.