Javascript处理对象数组中的键
我用它来跟踪我的网络摄像头播放的视频中的一些颜色 返回跟踪对象的代码非常简单,如下所示:Javascript处理对象数组中的键,javascript,jquery,arrays,javascript-objects,Javascript,Jquery,Arrays,Javascript Objects,我用它来跟踪我的网络摄像头播放的视频中的一些颜色 返回跟踪对象的代码非常简单,如下所示: tracker.on('track', function(event) { console.log(event.data) }); event.data是一个对象数组,每个对象包含5个键“color”、“x”、“y”、“height”、“width”,我要做的是找到两个对象,它们的“Xs”相差10,即x1-x2=10,或者x2-x1=
tracker.on('track', function(event) {
console.log(event.data)
});
event.data是一个对象数组,每个对象包含5个键“color”、“x”、“y”、“height”、“width”,我要做的是找到两个对象,它们的“Xs”相差10,即x1-x2=10,或者x2-x1=10,让我们称它们为相邻对象,因为event.data随实时跟踪而变化,这不是一个静态数组
尝试使用jQuery.grep,但无法理解如何处理多个项。您只需在数组中循环并比较这些值:
for var i = 0; i < event.data.length; i++ )
{
var data1 = event.data[ i ];
//Now we'll loop through the whole array to compare
for ( var x = 0; x < event.data.length; x++ )
{
if ( Math.abs( data1.x - event.data[ x ].x ) === 10 )
{
return { x1: data1, x2: event.data[ x ] };
}
}
}
我建议创建另一个容器数组来包含真的吗?跟踪器产生的所有阵列:
var container = [];
tracker.on("track", function(event) {
var newIndex = container.length;
container[newIndex] = event.data;
process(newIndex);
});
现在已保存所有数据,您可以处理这些数据:
function process(index) {
var adjacent = [];
for(var i = 0; i < container.length; i++) {
var subtract = container[index].x - container[i].x;
if(subtract == 10 || subtract == -10)
adjacent.push(i);
}
return adjacent;
}
所以现在,如果这个过程返回true,你知道差值是10。现在该怎么做取决于您。下面是我应该如何做的Array.prototype.filter和$.grep也会做同样的事情:
var events = [];
tracker.on('track', function(e){
events.push(e.data);
});
function getEventsByXDiff(x){
return events.filter(function(e){
return e.x - x === 10 || x - e.x === 10
});
}
// Usage: getEventsByXDiff(someEvent.x);
虚拟事件数据示例:取决于您需要答案的速度。如果直到视频结束,你不需要处理得那么快。制作一个函数,将x作为参数,并返回所有保存的事件,其中x的差值为+-10,因为可能有多个。@ArtOfCode这是一个实时流,只要它在运行,我就必须处理所有对象。或者只返回Math.abssubtract==10;符合事实的我之所以这样做,是因为它更容易一目了然。此外,事件第一次触发时,您将调用process并尝试获取容器[-1]……请注意,数组在每一帧上都会更新,我需要查找所有相邻对象,您的解决方案将只处理连续项。相邻?你是什么意思,@ProllyGeek?请再看一次我的问题,我需要找到所有相邻的物体。谢谢你的回答,我不明白你的逻辑,但你能解释一下为什么这不起作用吗@ProllyGeek它按预期工作。15是5+-10的唯一匹配项。但我需要两个与流程匹配的对象,即5和10@ProllyGeek5和10的差值为5,而不是你在问题中要求的10。你是在要求所有x+-10加上事件本身的匹配事件吗?Johan假设我们有一个[10,55,30,5,12]数组,我需要找到两个diff==5的元素,它们将输出10&5,它们满足条件。