Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.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 - Fatal编程技术网

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

Javascript 实现这种过滤的好方法是什么?,javascript,jquery,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"),

我有如下数据:

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
    应该只给出那些在其
    字段中相差1但具有相同
    日期
    字段的点。因此,这将返回一个新的数据集,其中包含ID为1,2,3,6,7,8的数据记录(前三个是因为值为10,11,12,后三个是因为值为21,22,23)
  • Filter2
    应该只给出那些在
    日期
    字段中相差1天但具有相同
    字段的点。因此,这将返回一个新的数据集,其中包含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;
}
功能过滤器1(arr){
//克隆阵列:
arr=arr.slice();
//按值对数组排序:
arr.sort(函数(a,b){
返回a.date-b.date | a.value-b.value;
});
//查找具有相同日期的连续元素:
var r=[];
对于(变量i=1;i如果(arr[i-1]。value==arr[i]。value&&arr[i]。date-arr[i-1]。date为什么,当然是自定义排序函数

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;
}
功能过滤器1(arr){
//克隆阵列:
arr=arr.slice();
//按值对数组排序:
arr.sort(函数(a,b){
返回a.date-b.date | a.value-b.value;
});
//查找具有相同日期的连续元素:
var r=[];
对于(变量i=1;iif(arr[i-1]。value==arr[i]。value&&arr[i]。date-arr[i-1]。日期筛选器1与上一个具有相同日期的元素或任何其他具有相同日期的元素“相差1”?是“相差1”是什么平均值?您是指唯一值吗?@nnnnnn:Difference by 1->Difference of 1。在
Filter1
中,这意味着对于具有相同日期的记录,获取所有连续的元素。Filter 1与具有相同日期的上一个元素或任何其他元素“Difference by 1”是什么平均值?你是指唯一的值吗?@nnnnnn:different by 1->Difference of 1。在
Filter1
中,这意味着对于具有相同日期的记录,获取所有连续的元素。对于
Filter1()
,在按值排序数组之前,最好先按日期排序(反之亦然,对于
filter2()
)?@AdamL:你说得对;谢谢。修复了。没问题,我道歉。我不知道为什么我对你用户名的“提及”没有出现…@AdamL:我是帖子的所有者,所以它会自动删除。(别担心,帖子的所有者总是会得到通知。有关详细信息,请参阅。)啊,好的,谢谢你的提醒。如果是
filter1()
(或者
filter2()
)的情况,在按值排序之前按日期对数组排序是个好主意吗?@AdamL:你说得对;谢谢。修复了。没问题,抱歉我不知道为什么要“提及”你的用户名没有出现…@AdamL:我是帖子的所有者,所以它会被自动删除。(别担心,帖子的所有者总是被通知的。详情请参阅。)啊,好的,谢谢你的提醒。