#javascript
#javascript
Вопрос:
У меня есть массив объектов :
myArray = [{id: 998, order: 0, duration: 0.2},
{id: 999, order: 1, duration: 0.2},
{id: 1, order: 2, duration: 0.2},
{id: 997, order: 3, duration: 0.2},
{id: 1, order: 4, duration: 0.2}]
Мне нужно рассчитать относительный диапазон продолжительности на временной шкале от 0 до 1 :
myArray.forEach((item, index) => {
if ( index === 0 ) {
item.range = {min: 0, max: item.duration}
else if (index === myArray.lenght - 1) {
item.range = {min: 1 - item.duration, max: 1}
else {
// TODO : pseudo code
//Maybe a loop
//if item[1] ? item.range = {min: item[0].range.max , max: item[0].range.max item[1].duration },
//if item[2] ? item.range = {min: item[1].range.max , max: item[1].range.max item[2].duration },
//if item[3] ? item.range = {min: item[2].range.max , max: item[2].range.max item[3].duration },
// .......
}
}
})
в конце функции мне нужно иметь что-то вроде этого:
myArray = [{id: 998, order: 0, duration: 0.2, range: {min: 0, max: 0.2}},
{id: 999, order: 1, duration: 0.2, range: {min: 0.2, max: 0.4}},
{id: 1, order: 2, duration: 0.2, range: {min: 0.4, max: 0.6}},
{id: 997, order: 3, duration: 0.2, range: {min: 0.6, max: 0.8}},
{id: 1, order: 4, duration: 0.2, range: {min: 0.8, max: 1}}]
Как я могу сделать?
Ответ №1:
Во время итерации следите за количеством времени, которое было повторено до сих пор:
const myArray = [{id: 998, order: 0, duration: 0.2},
{id: 999, order: 1, duration: 0.2},
{id: 1, order: 2, duration: 0.2},
{id: 997, order: 3, duration: 0.2},
{id: 1, order: 4, duration: 0.2}];
let durationSoFar = 0;
for (const item of myArray) {
const min = durationSoFar;
// Round to 3 decimal places to avoid floating point problems
durationSoFar = Math.round((item.duration min) * 1000) / 1000;
item.range = { min, max: durationSoFar };
}
console.log(myArray);
Ответ №2:
const myArray = [{id: 998, order: 0, duration: 0.2},
{id: 999, order: 1, duration: 0.2},
{id: 1, order: 2, duration: 0.2},
{id: 997, order: 3, duration: 0.2},
{id: 1, order: 4, duration: 0.2}];
let currentMin = 0
myArray.forEach((item) => {
item.range = {min: currentMin, max: Math.round((currentMin item.duration) * 1000) / 1000}
currentMin = item.range.max
})
console.log(myArray);