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-06
与 2018-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());
我在尝试使用 $.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-06
与 2018-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());