Массив объектов внутри массива объектов - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть этот объект. Я хочу добавить к ним «историю ускорений», поэтому у меня появилась блестящая идея сделать из этого объекта ускорения массив.

var connectedEstimotes = [{
id : 'n/a',
temp : 'n/a',
acceleration: [{x:'n/a',y:'n/a',z:'n/a'}],
isMoving : 'notSure',
batt : 'n/a',
motionStateDuration : { current:{number:'n/a',unit:'n/a'},previous:{number:'n/a',unit:'n/a'}},
cont : 0,
}];

Я получаю доступ к его свойствам следующим образом:

        connectedEstimotes[index] = estimotesplugin.nearableStuff(data);
        //Only the info that needs postprocessing is being updated afterwards
        connectedEstimotes[index].temp = Math.round((estimotesplugin.nearableStuff(data).temp) * 10) / 10;
        connectedEstimotes[index].acceleration.z = (estimotesplugin.nearableStuff(data).acceleration.z) + 980;
        connectedEstimotes[index].batt = Math.round((estimotesplugin.nearableStuff(data).batt) * 10) / 10;

Все работает нормально, но всякий раз, когда я пытаюсь это сделать:

connectedEstimotes[index].acceleration.push(estimotesplugin.nearableStuff(data).acceleration)

Возвращает:

TypeError: connectedEstimotes[index].acceleration.push is not a function

Если я попытаюсь сделать

var thisCont = connectedEstimotes[index].cont;
connectedEstimotes[index].acceleration[thisCont] = (estimotesplugin.nearableStuff(data).acceleration)
thisCont++;

Я понял, что thisCont - это NaN, хотя, если я сделаю следующую вещь, она будет работать (но она бесполезно для меня).

connectedEstimotes[index].acceleration[0] = (estimotesplugin.nearableStuff(data).acceleration)
thisCont++;

Кто-нибудь, помогите, плз? Есть ли лучший способ отслеживать историю значений этого?

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Благодаря комментарию @CertainPerformance я узнал, что мой объект шаблона

var connectedEstimotes = [{
id : 'n/a',
temp : 'n/a',
acceleration: [{x:'n/a',y:'n/a',z:'n/a'}],
isMoving : 'notSure',
batt : 'n/a',
motionStateDuration : { current:{number:'n/a',unit:'n/a'},previous:    {number:'n/a',unit:'n/a'}},
cont : 0,
}];

В самом деле есть массив объектов внутри, но когда я заполнил его estimotesplugin.nearableStuff(data), ускорение стало простым объектом внутри этого массива объектов.

Пришлось экспортировать ускорение в виде массива из estimotesplugin.

В составе функции эстимотсплугин у меня было:

var acceleration = {
        x: data.readInt8(16) * 15.625,
        y: data.readInt8(17) * 15.625,
        z: data.readInt8(18) * 15.625
    };
return {
    id,
    temp,
    acceleration,
    isMoving,
    batt,
    motionStateDuration,
}

Так что мне пришлось ...

var acceleration = [{
        x: data.readInt8(16) * 15.625,
        y: data.readInt8(17) * 15.625,
        z: data.readInt8(18) * 15.625
    }];

(Запомните новую квадратную скобку)

0 голосов
/ 08 сентября 2018

Метод push работает только тогда, когда объект ускорения уже является массивом. Прямо сейчас вы делаете это:

connectedEstimotes[index].acceleration.z = (estimotesplugin.nearableStuff(data).acceleration.z) + 980;

В этот момент ускоряющий объект - это обычный объект со свойством z, например,

connectedEstimates[index].acceleration = { z: 980 };

Однако вы хотите, чтобы acceleration был массивом [].

Вы можете [].push(x), но не можете { z: 980 }.push().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...