我有这个对象。我想向他们添加一个“ 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++;
有人帮忙,拜托?有没有更好的方法来跟踪此值的历史?
答案 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
}];
(请注意新的方括号)