对象数组内的对象数组

时间:2018-09-08 03:37:10

标签: javascript arrays object

我有这个对象。我想向他们添加一个“ accelerationHistory”,所以我有一个绝妙的主意,那就是将它的加速对象变成一个数组。

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 :(得分:1)

push方法仅在加速对象已经是数组时才有效。现在,您正在执行此操作:

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

此时,加速对象是具有属性z的普通对象,例如

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

但是,您想要的是acceleration作为数组[]

您可以[].push(x),但不能{ z: 980 }.push()

答案 1 :(得分:0)

感谢@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中导出。

在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
    }];

(请注意新的方括号)