const N = 150;
let fakeState = {};
for (let i = 0; i < N; ++i) {
fakeState[i] = {
speed: 100,
geoPos: [0, 0, 0],
angles: [0, 0],
moveVec: [1, 1, 0],
foo: 'bar'
};
}
const actTimes = 25;
for (let i = 0; i < actTimes; ++i) {
const objectId = Math.floor(Math.random() * N);
const nextObjStatePartial = { speed: 50, angles: [1, 1] };
fakeState = {
...fakeState,
[objectId]: {
...fakeState[objectId],
...nextObjStatePartial
}
};
}
for (let i = 0; i < actTimes; ++i) {
const objectId = Math.floor(Math.random() * N);
const nextObjStatePartial = { speed: 50, angles: [1, 1] };
// Такой код получается после компиляции TS кода выше (на спред-операторе) с target < ES2018
fakeState = Object.assign(Object.assign({}, fakeState), {
[objectId]: Object.assign(
Object.assign({}, fakeState[objectId]),
nextObjStatePartial
)
});
}
for (let i = 0; i < actTimes; ++i) {
const objectId = Math.floor(Math.random() * N);
const nextObjStatePartial = { speed: 50, angles: [1, 1] };
Object.assign(fakeState[objectId], nextObjStatePartial);
}
for (let i = 0; i < actTimes; ++i) {
const objectId = Math.floor(Math.random() * N);
const nextObjStatePartial = { speed: 50, angles: [1, 1] };
if ("angles" in nextObjStatePartial)
fakeState[objectId].angles = nextObjStatePartial.angles;
if ("speed" in nextObjStatePartial)
fakeState[objectId].speed = nextObjStatePartial.speed;
// по идее нужно проверять все остальные пропсы на наличие и сетать их тут, но скипнем
}