首页 > 解决方案 > 带变量的动态数组过滤函数

问题描述

我是一个 JS 菜鸟,一直被困在一个动态过滤器问题上。我有一组正在后台构建的对象。每个对象都有几个“字段”,其中一个是“时间”。

我希望能够过滤数组以保留所有对象,例如 obj.field.time > t - dt/2obj.field.time < t + dt/2

从其他论坛我知道如何为常量执行此操作(请参见下面的代码的简化摘录)

filtered_array = array.filter(obj => obj.field.time >= t - dt/2 && obj.field.time <= t + dt/2)

但是如果tdt可以变化,我该怎么做呢?此外,不确定这是否有影响,但我的“数组”也在逐渐演变(每个时间步dt都会添加几行)

提前谢谢了!

[编辑 - 添加代码以进行澄清]

t = 0;
dt = 0.2;
play = false; // a button on the interface can toggle the play boolean

setInterval(playTime, dt * 1000);

function playTime() {
    if (play) {
        t = t + dt;
        filtered_array = vdData_flat.filter(obj => obj.fields.time >= t - dt / 2 && obj.fields.time <= t + dt / 2)

        console.log('extract: ', filtered_array);
    }
}

然后是更新 vdData_flat 的地方:

ticksSocket.onmessage = function (event) {
    data = JSON.parse(event.data);
    [...other stuff...]
    vdData.push(data);
    vdData_flat = flatten(vdData);
}

和:

    // Function for flattening vdData
function flatten(arr) {
    return arr.reduce(function (flat, toFlatten) {
        return flat.concat(Array.isArray(toFlatten) ? flatten(toFlatten) : toFlatten);
    }, []);
}

标签: javascriptarraysfilter

解决方案


推荐阅读