Javascript: Pu sh Данные объекта в указанном индексе c в массиве и нули до остальной части индекса - PullRequest
1 голос
/ 10 февраля 2020

У меня возникла небольшая проблема при вставке данных объекта в указатель c index в массиве.

Вот мой вывод JSON

let arr = [ 
        {"days":3, "count" : 10 },
    {"days":4, "count" : 12 },
    {"days":7, "count" : 14 },
    {"days":9, "count" : 20 }

]

, я хотел бы получить .

updatedArr = [ 
             {"days":0, "count" : 0 },
             {"days":0, "count" : 0 },
             {"days":3, "count" : 10 },
             {"days":4, "count" : 12 },
             {"days":0, "count" : 0 },
             {"days":6, "count" : 34 },
]

поэтому в основном я хочу, чтобы данные объекта передавались с указанным c индексом на основе его ключа, называемого days .

Если значение days больше 5, тогда это будет сумма всех значений days в один и pu sh, что в последнем индексе, например, 5-м индексе.

Здесь это код, который я пробовал.

let arr = [{
    "days": 3,
    "count": 10
},
{
    "days": 4,
    "count": 12
},
{
    "days": 7,
    "count": 14
},
{
    "days": 9,
    "count": 20
}

]

for (let index = 0; index < 6; index++) {
const element = arr[index];


let eachObject = {}

eachObject.count = 0


if (element && element !== undefined && element.days && element.days <= 5) {

    eachObject.days = element.days
    eachObject.count = element.count

    arr.splice((element.days - 1), 0, eachObject)

} else if (element && element !== undefined && element.days > 5) {

    eachObject.days = element.days
    eachObject.count += Number.parseInt(element.count)

    arr.splice(4, 0, eachObject)
} else {
    eachObject.days = 0
    eachObject.count = 0
    arr.push(eachObject)
}

}

Любая помощь будет отличной.

Спасибо.

1 Ответ

1 голос
/ 10 февраля 2020

Вы можете создать новый набор данных с пустыми счетчиками и обновить их фактическими значениями из массива.

Позвольте начать с аккумулятора.

Это новый массив, используя Array.from с длиной элементов 6 и отображением объекта со свойствами days и count.

Array#reduce принимает массив и startValue и возвращает измененный аккумулятор для каждого элемента.

Внутри обратного вызова для свойства days выполняется настройка для большего значения.

An обновление происходит для некоторых свойств элемента. В конце возвращается аккумулятор r.

let array = [{ days: 3, count: 10 }, { days: 4, count: 12 }, { days: 7, count: 14 }, { days: 9, count: 20 }],
    maxDays = 6,
    result = array.reduce(
        (r, { days, count }) => {
            days = Math.min(days, maxDays);
            r[days - 1].days = days;
            r[days - 1].count += count;
            return r;
        },
        Array.from({ length: maxDays }, () => ({ days: 0, count: 0 }))
    );

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...