jquery 延迟对象中的 $.grep returns 无法读取未定义的 属性 'value'

jquery $.grep in deferred object returns Cannot read property 'value' of undefined

我在尝试使用 $.grep

获取值时遇到问题

我向 url 发送了一个 GET 请求,以带回 JSON 的日期和值负载。

然后在回调函数中,我从 JSON 文件中获取日期和值,并使用延迟对象将结果分配给变量。

ajax 请求完成后,我循环遍历原始响应,然后使用 $.grep 过滤 json 变量以获得正确的值。

如果我 console.log $.grep 的结果,我得到了正确的值,但是我得到了以下错误。

jQuery.Deferred exception: Cannot read property 'value' of undefined TypeError: Cannot read property 'value' of undefined

如何从 $.grep 中获取值?

var history;

$.getJSON(window.website_url + 'history', function(response) {

    var series = { 
        name: 'Price Index History', 
        data: []
    };

    var deferreds = [];

    if($('#currency').val() === 'GBP') {

        deferreds.push(
            $.ajax({
                url: window.website_url = 'exchange-rate',
                type: 'get',
                dataType: 'json',
                success: function (data) {
                    history = data;
                }
            })
        );

        $.when.apply($, deferreds).done(function() {

            $.each(response, function(i, item) {

                var date = new Date(item[0]),
                    day;

                if((date.getMonth() + 1) < 10) {
                    day = date.getFullYear() + '-' + '0' + (date.getMonth() + 1) + '-' + date.getDate();
                }
                else {
                    day = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
                }

                var result = $.grep(history, function(e) { return e.date == day; });

                var test = result[0].value;

                series.data.push([item[0], Number(parseFloat(item[1] * result[0].value).toFixed(1))]);
            });
        });
    }
    else {
        $.each(response, function(i, item) {
            series.data.push([item[0], item[1]]);
        });
    }
});

编辑

Here is the json returned the ajax request
[
    {
        "date":"2018-01-30",
        "value":0.706419
    },
    {
        "date":"2018-01-31",
        "value":0.70417
    },
    {
        "date":"2018-02-01",
        "value":0.70095
    },
    {
        "date":"2018-02-02",
        "value":0.70808
    },
    {
        "date":"2018-02-03",
        "value":0.70808
    },
    {
        "date":"2018-02-04",
        "value":0.70871},
    {
        "date":"2018-02-05",
        "value":0.717141
    },
    {
        "date":"2018-02-06",
        "value":0.71645
    },
    {
        "date":"2018-02-07",
        "value":0.716369
    }
]

我看到你的问题了...

对于一个月中的几天,例如 01 - 09,getDate() 将 return 一个数字(即 1、2、3 等)。

对于日期 2018-02-06,您正在将 2018-02-062018-01-6

进行比较

使用这样的函数将 6 替换为 06

function day_of_month(d) { 
    return (d.getDate() < 10 ? '0' : '') + d.getDate();
}

比如

day = date.getFullYear() + '-' + '0' + (date.getMonth() + 1) + '-' + day_of_month(getDate());