Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript处理对象数组中的键_Javascript_Jquery_Arrays_Javascript Objects - Fatal编程技术网

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,它们满足条件。