我有一个json,其中只有当前年份的数据,日期是ISODATE格式,我怎么能,角度1按月分隔json对象,例如,将数据抛给另一个json,对应于月份在变量日期定义。
我做了以下事情:
.then(function(resp) {
vm.acoesAno = resp.data
angular.forEach(vm.acoesAno, function(value, key){
angular.forEach(vm.acoesAno, function(value, key){
const date = new Date(value.data)
const mes = date.getMonth()
if (mes == 0){
vm.jan = vm.acoesAno[key]
} else if (mes == 1){
vm.fev = vm.acoesAno[key]
} else if (mes == 2){
vm.mar = vm.acoesAno[key]
} else if (mes == 3){
vm.abr = vm.acoesAno[key]
} else if (mes == 4){
vm.mai = vm.acoesAno[key]
} else if (mes == 5){
vm.jun = vm.acoesAno[key]
} else if (mes == 6){
vm.jul = vm.acoesAno[key]
} else if (mes == 7){
vm.ago = vm.acoesAno[key]
} else if (mes == 8){
vm.set = vm.acoesAno[key]
} else if (mes == 9){
vm.out = vm.acoesAno[key]
} else if (mes == 10){
vm.nov = vm.acoesAno[key]
} else if (mes == 11){
vm.dez = vm.acoesAno[key]
}
})
})
console.log("mes de maio: ", vm.mai)}
json vm.acoesAno中有两个对象在5月份注册,但是在forEach之外的变量中我只得到1个对象,forEach中的变量存储了两个对象。
JSON DATA vm.acoesAno:
{
data : "2018-05-06T03:00:00.000Z",
longitude : "-52.018375",
latitude : "-27.226520",
dataCadastro : "2018-05-22T02:57:01.443Z"
}
但是json中有几个具有不同日期的对象。
@ vol7ron
答案 0 :(得分:0)
不再熟悉Angular了,但是:
vm.mai = vm.acoesAno[key]
)而不是添加到集合或数组,这意味着您将覆盖每次迭代
.then(function(resp) {
vm.acoesAno = resp.data
let grouped = {}
angular.forEach(vm.acoesAno, function(value, key, obj) {
const date = new Date(value.data)
const mes = date.getMonth()
if (typeof grouped[+mes] == 'undefined')
grouped[+mes]=[]
grouped[+mes].push(obj);
})
console.log("mes de maio: ", grouped[4])
})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
答案 1 :(得分:0)
您可以使用Array.prototype.filter
和正则表达式匹配特定月份来过滤数据
// if you want to make it efficient, you can do something
.then(function(resp) {
const data = resp.data;
vm.jan = [];
vm.fev = [];
// initialize all arrays to empty array
vm.acoesAno = data;
data.forEach(item => {
if (/(.*)-01-(.*)/.test(item.data)){
vm.jan.push(item);
} else if (/(.*)-02-(.*)/.test(item.data)){
vm.fev.push(item);
} else if (/(.*)-03-(.*)/.test(item.data)){
vm.mar.push(item);
}
// and so on
});
// 2nd method
.then(function(resp) {
const data = resp.data;
vm.acoesAno = data;
vm.jan = data.filter(item => /(.*)-01-(.*)/.test(item.data);
vm.fev = data.filter(item => /(.*)-02-(.*)/.test(item.data);
vm.mar = data.filter(item => /(.*)-03-(.*)/.test(item.data);
vm.abr = data.filter(item => /(.*)-04-(.*)/.test(item.data);
// and so on for all other months
});
&#13;