我在javascript中有两个对象数组:
第一个得到的是传感器获取的纬线。
{
time : 'some timestamp',
weigth : 1160
}第二个得到另一个传感器获取的rfid。
{
time : 'some timestamp',
rfid : 'some rfid identifer'
}对于获得的每个rfid标识符,我希望在获取数据时间之前和之后得到weigth。如果在rfid之后的数组中没有任何偏差,我就得到了一个未定义的值。
两个数组都按时间排序。
现在,我有了当前的代码:
var rfidNext = [];
for (var i = 0; i < this.acquiredData.rfid.length; i++)
{
var weigths = this.acquiredData.weigthLitter;
var currentRfid = this.acquiredData.rfid[i];
var weigther = weigths.find(w => w.time > currentRfid.time);
if (!weigther)
rfidNext.push(currentRfid);
else
toSend.events.push({
// Some logic here
});
}这段代码似乎让我在rfid数据之后找到了正确的方法,但我找不到一种干净的方法来获取之前的数据。
编辑:数据示例
[ { time: 1561458881523, value: '1000 0000 0000 0001' },
{ time: 1561458882212, value: '1000 0000 0000 0001' },
{ time: 1561458883941, value: '1000 0000 0000 0002' } ]
[ { time: 1561458881182, value: 2130 },
{ time: 1561458881584, value: 1000 },
{ time: 1561458882789, value: 2130 },
{ time: 1561458884599, value: 3290 } ]以这些数据为例:第一个rfid是在第一个和第二个被获取的魏格之间,这意味着动物从盒子里出来了,第二个rfid显示动物回来了,最后一个显示这个动物再次走高,而另一个rfid则让另一个动物进入盒子。
编辑:更大的数据集示例
[ { time: 1561469442605, value: '1000 0000 0000 0001' },
{ time: 1561469463263, value: '1000 0000 0000 0001' },
{ time: 1561469503038, value: '1000 0000 0000 0002' },
{ time: 1561469524312, value: '1000 0000 0000 0001' },
{ time: 1561469530073, value: '1000 0000 0000 0002' },
{ time: 1561469551351, value: '1000 0000 0000 0001' },
{ time: 1561469552085, value: '1000 0000 0000 0001' },
{ time: 1561469579144, value: '1000 0000 0000 0001' },
{ time: 1561469627817, value: '1000 0000 0000 0001' },
{ time: 1561469629525, value: '1000 0000 0000 0002' } ]
[ { time: 1561469394648, value: 1000 },
{ time: 1561469443257, value: 2130 },
{ time: 1561469463268, value: 1000 },
{ time: 1561469503679, value: 2160 },
{ time: 1561469524962, value: 3290 },
{ time: 1561469530073, value: 2130 },
{ time: 1561469551358, value: 1000 },
{ time: 1561469552740, value: 2130 },
{ time: 1561469579144, value: 1000 },
{ time: 1561469628430, value: 2130 },
{ time: 1561469630175, value: 3290 } ]详细解释:
一开始,没有动物在1000岁的时候。
然后动物1进来了:2130年的西部
动物1出来: 1000度
动物2进入: weigth : 2160
动物1进入: 3290的西部
等等..。
所以我的目标是根据维格特的变化和rfid的读数来找出动物是在里面还是在外面。
发布于 2019-06-26 14:27:34
嗯,我终于用索引实现了这个目标(我觉得以前不考虑这个问题有点傻,但是,当你专注于你的想法时,有时很难得到另一个观点)。
for (var i = 0; i < this.acquiredData.rfid.length; i++)
{
var weigths = this.acquiredData.weigthLitter;
var currentRfid = this.acquiredData.rfid[i];
var indexSup = weigths.findIndex(w => w.time >= currentRfid.time);
Log("RFID : " + currentRfid.value + "@" + currentRfid.time + " Before :" + weigths[indexSup - 1].value+ "@" + weigths[indexSup - 1].time + " After :" + weigths[indexSup].value + "@" + weigths[indexSup].time);
var evttype = weigths[indexSup - 1].value > weigths[indexSup].value ? 'exit' : 'entrance';
toSend.events.push({
type : evttype,
bunnyId : currentRfid.value.toString(),
value : currentRfid.time
});
}在剩下的模拟中,我设法确保当我在代码的这一点时,数据就会完成。
发布于 2019-06-25 12:13:15
我试图解决您的场景,看看我迭代了rfid数据,找到了before和after time和weights。比较这些值,并依赖于将msg和rfid推送到result数组的决策
var acquiredData = {
weigthLitter: [
{ time: 1561458881182, value: 2130 },
{ time: 1561458881584, value: 1000 },
{ time: 1561458882789, value: 2130 },
{ time: 1561458884599, value: 3290 }],
rfid: [ { time: 1561458881523, value: '1000 0000 0000 0001' },
{ time: 1561458882212, value: '1000 0000 0000 0001' },
{ time: 1561458883941, value: '1000 0000 0000 0002' } ]
}
var { weigthLitter, rfid } = acquiredData
var result = rfid.reduce((acc, el, id)=> {
var currentRfid = el.value;
var after = weigthLitter.find(w => w.time > el.time);
var before = weigthLitter.find(w => w.time < el.time);
if(rfid[id-1] === undefined || (rfid[id-1] && rfid[id].value === rfid[id-1].value)){ // checking rfid is same or undefined
if (before.value > after.value) {
acc.push({rfid: el.value, msg: "animal got out of the box" })
} else {
acc.push({rfid: el.value, msg: "animal came back in" })
}
} else {
acc.push({rfid: el.value, msg: "another animal came back in" })
}
return acc
}, [])
console.log(result) //[{"rfid":"1000 0000 0000 0001","msg":"animal got out of the box"},{"rfid":"1000 0000 0000 0001","msg":"animal came back in"},{"rfid":"1000 0000 0000 0002","msg":"another animal came back in"}]https://stackoverflow.com/questions/56751976
复制相似问题