首页 > 解决方案 > 如何过滤一个 JS 对象并按日期排序?

问题描述

JS级别:菜鸟。

我有以下对象,其中包含 ~130 个trades对象:

{
    "trades": {
        "model": "Trades_Information"
        "fields": {
                "orderCloseTime": "2019-12-19T16:20:56",
                [...]

        },
        "model": "Trades_Information"
        "fields": {
                "orderCloseTime": null,
                [...]
        },
        "model": "Trades_Information"
        "fields": {
                "orderCloseTime": 2019-12-17T16:20:56,
                [...]
        },

        [...]

}

现在我尝试定义一个函数,该函数splices包含所有对象,orderCloseTime: null并按日期对剩余对象进行排序。

使用几个 SO 线程和 JS 文档,我现在以这种愚蠢的尝试结束:

// loop and splice where if-condition is met
jQuery(trades).each(function (index){
    if(trades[index].fields.orderCloseTime == null){
                trades.splice(index,1);
                return false;
            }
    });

// define sort function

function trades_sort(a, b) {
    return new Date(a.orderCloseTime).getTime() - new Date(b.orderCloseTime).getTime();
}

// sort remaining objects

trades.sort(trades_sort);

当我运行代码时,它只拼接一个对象,而它应该拼接其中的六个,并且 sort 函数实际上根本不排序。

标签: javascript

解决方案


JSON 中的字段不应重复,您只有 2 个键“字段”和“模型”

所以只会加载根据您的信息的两个元素

主要问题是不正确的json

关于代码我不知道什么是交易,什么是 jQuery,但如果交易是对象数组,那么你可以过滤它

trades.filter(v => v.fields.orderCloseTime)

使用排序功能一切都是正确的


推荐阅读