javascript - 实现这种过滤的好方法是什么?

标签 javascript jquery

我有如下数据:

var data = [{
   id: 1,
   date: new Date("2010-01-01"),
   value: 10
}, {
   id: 2,
   date: new Date("2010-01-01"),
   value: 11
}, {
   id: 3,
   date: new Date("2010-01-01"),
   value: 12
}, {
   id: 4,
   date: new Date("2010-01-02"),
   value: 10
}, {
   id: 5,
   date: new Date("2010-01-03"),
   value: 10
}, {
   id: 6,
   date: new Date("2010-01-03"),
   value: 21
}, {
   id: 7,
   date: new Date("2010-01-03"),
   value: 22
}, {
   id: 8,
   date: new Date("2010-01-03"),
   value: 23
}];

我正在尝试应用两种过滤器:

  • Filter1应该只给我那些在 value 中相差 1 的点字段但具有相同的 date field 。因此,这应该返回一个新的数据集,其中包含 id 为 1,2,3,6,7,8 的数据记录(前三个因为值为 10,11,12,后三个因为值为 21,22,23)<
  • Filter2应该只给我那些在 date 中相差 1 天的点字段但具有相同的 value field 。因此,这应该返回一个新的数据集,其中包含 ID 为 1,4,5 的数据记录

我目前正在服务器端使用 C# 执行此操作,但我想看看是否有一种有效的方法可以在 Javascript 中执行此操作。有什么建议吗?

最佳答案

为什么,当然是自定义排序函数!

function filter1(arr) {
    // Clone the array:
    arr = arr.slice();

    // Sort the array by value:
    arr.sort(function(a, b) {
        return a.date - b.date || a.value - b.value;
    });

    // Look for consecutive elements with the same date:
    var r = [];

    for(var i = 1; i < arr.length; i++) {
        if(+arr[i - 1].date === +arr[i].date && arr[i - 1].value === arr[i].value - 1) {
            if(r.indexOf(arr[i - 1]) === -1) r.push(arr[i - 1]);
            r.push(arr[i]);
        }
    }

    // Return the result
    return r;
}

function filter2(arr) {
    // Clone the array:
    arr = arr.slice();

    // Sort the array by date:
    arr.sort(function(a, b) {
        return a.value - b.value || a.date - b.date;
    });

    // Look for consecutive elements with the same value:
    var r = [];

    for(var i = 1; i < arr.length; i++) {
        if(arr[i - 1].value === arr[i].value && arr[i].date - arr[i - 1].date <= 24 * 60 * 60 * 1000) {
            if(r.indexOf(arr[i - 1]) === -1) r.push(arr[i - 1]);
            r.push(arr[i]);
        }
    }

    // Return the result
    return r;
}

关于javascript - 实现这种过滤的好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11130478/

相关文章:

javascript 国际化和列表(例如 [foo,bar,blah] 到 "foo, bar and blah")

跨多个元素的 jQuery 动画队列

javascript - jqGrid - 在 "edit"上禁用内联下拉菜单,但不在 "add"上禁用内联下拉菜单

jquery - 在 jQuery UI 日期选择器中将今天的日期设置为默认日期

javascript - 使用jquery动态扩展表

javascript - 分割在 ng-repeat 指令内创建的字符串(ng-model)

javascript - 使用(变量类型)作为条件是否不正确? es-lint 显示意外的恒定条件

javascript - 离开表单时显示警报(提交按钮除外)

JavaScript,按钮,点击

javascript - 如何在函数onclick中调用函数