我有一个如下所示的数据对象:
[{
"key": "K1204",
"values": [{
"key": "Both",
"values": [{
"key": "2015-01",
"values": 27927.7349421797
}, {
"key": "2015-02",
"values": 27927.7349421797
}, {
"key": "2015-03",
"values": 27927.7349421797
}]
}, {
"key": "Only 1",
"values": [{
"key": "2015-01",
"values": 289819.9054
}, {
"key": "2015-02",
"values": 289819.9054
}, {
"key": "2015-03",
"values": 289819.9054
}]
}]
}, {
"key": "test",
"values": [{
"key": "Both",
"values": [{
"key": "2015-01",
"values": 1602.24390394729
}, {
"key": "2015-02",
"values": 1602.24390394729
}, {
"key": "2015-03",
"values": 1602.24390394729
}]
}, {
"key": "Only 1",
"values": [{
"key": "2015-01",
"values": 0
}, {
"key": "2015-02",
"values": 0
}, {
"key": "2015-03",
"values": 0
}]
}, {
"key": "Only 2",
"values": [{
"key": "2015-01",
"values": 104732.0298
}, {
"key": "2015-02",
"values": 104732.0298
}, {
"key": "2015-03",
"values": 104732.0298
}]
}]
}]
我正在尝试将key
中的日期字符串转换为日期,但我无法让我的代码生效...
这是我到目前为止所做的:
get_scn_cst_data().then(function(costByScn) {
var data2 = []
for(i = 0; i < costByScn.length; i++) {
var envs = costByScn[i]
for(j = 0; j < envs.length; j++) {
envs[j].["values"].map(function(data) {
data["key"] = new Date(data["key"]).getTime();
data2.push(data);
});
}
}
console.log("data2: ", JSON.stringify(costByScn));
$scope.data_costByScn = costByScn;
});
我认为我在正确的轨道上,但循环似乎没有正常工作......
我遇到的唯一错误是:Error: [ng:areq] http://errors.angularjs.org/1.5.5/ng/areq?p0=comparisonReportsController&p1=not%20aNaNunction%2C%20got%20undefined
- - - - - - - - 编辑
这样试试,没有运气:
get_scn_cst_data().then(function(costByScn){
var data2 = []
for(i=0;i<costByScn.length;i++) {
var envs = costByScn[i]
for(j=0;j<envs.length;j++) {
data2.push(envs[j].["values"].map(function(data) {
data["key"] = new Date(data["key"]).getTime();
return data;
}));
}
}
console.log("data2: ", JSON.stringify(costByScn));
$scope.data_costByScn = costByScn;
})
答案 0 :(得分:1)
很好的功能性方法:
var dates = [];
costByScn.forEach(function(scn) {
scn.values.forEach(function(value) {
value.values.forEach(function(value2) {
dates.push(new Date(value2.key));
});
});
});
答案 1 :(得分:1)
以下是您的第一个代码示例的更新版本的小提琴:https://jsfiddle.net/q9e6mc6m/2/
有些事情可以解释为什么你的解决方案无效:
var envs = costByScn[i]
应该是
var envs = costByScn[i].values;
因为你试图迭代values
数组。否则envs
是{ key: "..", values: {}}
的对象,您无法使用for
循环。这有点令人困惑,因为数据结构具有相同名称的嵌套键(values.values)。
这一行:
data2.push(envs[j].["values"].map(function(data) {
有一段额外的句点.
它应该是envs[j]["values"]
答案 2 :(得分:1)
我希望这会有所帮助:
for(i = 0; i < costByScn.length; i++) {
for(j = 0; j<costByScn[i].values.length; j++) {
var envs = costByScn[i].values[j];
costByScn[i].values[j].values = envs.values.map(function(env) {
var obj = env;
obj.key = new Date(obj.key).getTime();
return obj;
})
}
}
console.log("data2: ", JSON.stringify(costByScn));
答案 3 :(得分:0)
尝试这样的事情:
let obj = JSON.parse('[{ "key": "K1204", "values": [{ "key": "Both", "values": [{ "key": "2015-01", "values": 27927.7349421797 }, { "key": "2015-02", "values": 27927.7349421797 }, { "key": "2015-03", "values": 27927.7349421797 }] }, { "key": "Only 1", "values": [{ "key": "2015-01", "values": 289819.9054 }, { "key": "2015-02", "values": 289819.9054 }, { "key": "2015-03", "values": 289819.9054 }] }]}, { "key": "test", "values": [{ "key": "Both", "values": [{ "key": "2015-01", "values": 1602.24390394729 }, { "key": "2015-02", "values": 1602.24390394729 }, { "key": "2015-03", "values": 1602.24390394729 }] }, { "key": "Only 1", "values": [{ "key": "2015-01", "values": 0 }, { "key": "2015-02", "values": 0 }, { "key": "2015-03", "values": 0 }] }, { "key": "Only 2", "values": [{ "key": "2015-01", "values": 104732.0298 }, { "key": "2015-02", "values": 104732.0298 }, { "key": "2015-03", "values": 104732.0298 }] }]}]');
for (idx = 0; idx < obj.length; idx++){
for (idxV = 0; idxV < obj[idx].values[0].values.length; idxV++){
console.log(obj[idx].values[0].values[idxV].key);
}
}
答案 4 :(得分:0)
const convertYearMonthStringToDateObject =
(yearMonthString) => new Date(yearMonthString)
const transformItemProperty = (arr, property, transformFn) => arr.map(
(item) => Object.assign({}, item, {[property]: transformFn(item[property])})
)
const mapKeys = (arr) =>
transformItemProperty(arr, 'key', convertYearMonthStringToDateObject)
const mapValues = (arr) => transformItemProperty(arr, 'values', mapKeys)
const convertData = (arr) => transformItemProperty(arr, 'values', mapValues)