我有一个JSON:
var datat= {"Model": "Model A",
"Datase": [
{
"Id": "DatchikSveta11",
"Group": 2,
"State": "on",
"Data": [{
"Date":"2017-08-11 15:10:34.363",
"Value":"0"
},{
"Date":"2017-08-12 21:12:34.363",
"Value":"32"
},{
"Date":"2017-08-15 21:55:34.363",
"Value":"200"
}],
"DataVolume": "luxs"
},{
"Id": "DatchikSveta2",
"Group": 2,
"State": "on",
"Data": [{
"Date":"2017-08-11 17:11:34.363",
"Value":"100"
},{
"Date":"2017-08-15 18:11:34.363",
"Value":"100"
},{
"Date":"2017-08-16 19:12:34.363",
"Value":"200"
}],
"DataVolume": "luxs"
}
]}
我有一个解析JSON对象的函数。
parseDate = d3.timeParse("%Y-%m-%d %H:%M:%S.%L");
datat.Datase.forEach(function (kv) {
kv.Data.forEach(function (d) {
parseDate(d.Date);
parseInt(d.Value);
});
});
此函数更改原始JSON对象中的值(日期到解析日期),因此当我试图第二次调用此函数时,它会给出错误的值,因为它试图解析已解析的日期。
我需要指定一个条件,以便检查是否需要解析或不需要解析。 或者也许某人有一个函数可以帮助解析已解析的值而无需在原始JSON中更改它?我知道最简单的方法是从函数返回新变量:
.data(function (d){
var a = d.Data.slice(d.Data.length-1,d.Data.length);
a.forEach(function (k){k["Id"]=d.Id; k["Date"]=parseDate(d.Date);});
return a;
})
我可以在JSON中更改日期格式,但谁需要简单的方法?
我是一个新的javascript,没有时间理论:P 但我希望有人能给我一个很好的答案。
对不起我的英语并对理论感到抱歉,感谢您的关注:)
答案 0 :(得分:0)
如果您不介意添加信息,那么您只需输入train
值并检查该值。使用上面的isParsed
变量,您可以简单地进行更改:
datat
这将贯穿并进行您需要的更改,但设置datat.Datase.forEach(function (kv) {
kv.Data.forEach(function (d) {
if(d.isParsed != true ){
d.Date = parseDate(d.Date);
d.Value = parseInt(d.Value);
d.isParsed = true;
}
});
});
的密钥,并在迭代完成后将其设置为isParsed
。然后forEach检查它是否已被解析并跳过它,否则它将解析它。
答案 1 :(得分:0)
正如@Bwaxxlo所说:
您可以检查变量是否是Date对象的实例。例如:x = new Date(); x instanceof Date // true。
正如D3 API所说的d3.timeParse函数:
返回的函数解析指定的字符串,返回相应的日期;如果根据此格式的说明符无法解析字符串,则返回null
所以它很清楚。我可以这样做:
Promise.all(allGlobalFilters.map(({rtbSspPublishers}) => rtbSspPublishers)).then(values => {
const theNewValues = allGlobalFilters
.map((item, i) => { return Object.assign({}, item, { rtbSspPublishers: values[i] }) })
.filter(item => item.rtbSspPublishers.name.startsWith('Mobile'))
// use theNewValues right here, or call a methof
// someMethod(theNewValues);
})