Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
格式化Json,删除重复项并计算javascript中的元素_Javascript_Angularjs_Json - Fatal编程技术网

格式化Json,删除重复项并计算javascript中的元素

格式化Json,删除重复项并计算javascript中的元素,javascript,angularjs,json,Javascript,Angularjs,Json,我有点迷路了,我有一个json格式的数据集,带有时间戳和ID,如下所示: [{ "date":"2016-11-18 19:20:42","id_pa":"7" },{ "date":"2016-11-18 19:04:55","id_pa":"5" },{ "date":"2016-11-19 20:53:42","id_pa":"7" },{ "date":"2016-11-19 20:53:43","id_pa":"7" },{ "date":"2016-11-19 2

我有点迷路了,我有一个json格式的数据集,带有时间戳和ID,如下所示:

[{
  "date":"2016-11-18 19:20:42","id_pa":"7"
},{
  "date":"2016-11-18 19:04:55","id_pa":"5"
},{
  "date":"2016-11-19 20:53:42","id_pa":"7"
},{
  "date":"2016-11-19 20:53:43","id_pa":"7"
},{
  "date":"2016-11-19 20:53:43","id_pa":"7"
},{
  "date":"2016-11-20 20:49:42","id_pa":"7"
},{
  "date":"2016-11-20 20:50:45","id_pa":"7"
},{
  "date":"2016-11-20 20:50:46","id_pa":"7"
}]
[{
  "date":"18-11-2016","num_pa":"2"
},{
  "date":"19-11-2016","num_pa":"1"
},{
  "date":"20-11-2016","num_pa":"1"
}]
我想构建一个json,显示每天的日期和ID数量。新的Json如下所示:

[{
  "date":"2016-11-18 19:20:42","id_pa":"7"
},{
  "date":"2016-11-18 19:04:55","id_pa":"5"
},{
  "date":"2016-11-19 20:53:42","id_pa":"7"
},{
  "date":"2016-11-19 20:53:43","id_pa":"7"
},{
  "date":"2016-11-19 20:53:43","id_pa":"7"
},{
  "date":"2016-11-20 20:49:42","id_pa":"7"
},{
  "date":"2016-11-20 20:50:45","id_pa":"7"
},{
  "date":"2016-11-20 20:50:46","id_pa":"7"
}]
[{
  "date":"18-11-2016","num_pa":"2"
},{
  "date":"19-11-2016","num_pa":"1"
},{
  "date":"20-11-2016","num_pa":"1"
}]
我想我必须做一个.map来格式化日期,使其显示dd-mm-yyyy,然后做一个.filter来删除重复项,最后做一个.reduce来计算每个日期的不同ID。到目前为止,我只完成了.map过程,但我不确定如何执行下一步,我的解决方案是否是最佳解决方案

这是我的一段代码:

SwapSvc
    .getUsage (vm.id_fi)
    .then((data)=>{
        //console.log(`lreceived data: `+ JSON.stringify(data) );
        vm.fdata = data.map((elem) => {
        //console.log(`date: ${elem.date}`);
        //console.log(`id_pa: ${elem.id_pa}`);
        var d = new Date (elem.date);
        return{
            date:d.getDate()+'-'+d.getMonth()+'-'+d.getFullYear()/*elem.date*/,
            id_pa:elem.id_pa
        }})
        var temp = [];
        vm.filteredData = vm.fdata.filter((elem, index) => {
            if(temp.indexOf(elem.date)<0){
                temp.push(elem);
                return true;
                }
            else return false;
        });
        console.log(`data after parsing and ordering: `+ JSON.stringify(vm.filteredData) ); 
        return data;
    })
    .catch((err)=>{
        //error
        console.log(`error, no response`);
        throw err;
    });
SwapSvc
.getUsage(vm.id\u-fi)
。然后((数据)=>{
//log(`lreceived data:`+JSON.stringify(data));
vm.fdata=data.map((elem)=>{
//log(`date:${elem.date}`);
//log(`id\u pa:${elem.id\u pa}`);
var d=新日期(要素日期);
返回{
日期:d.getDate()+'-'+d.getMonth()+'-'+d.getFullYear()/*元素日期*/,,
id\u pa:elem.id\u pa
}})
var-temp=[];
vm.filteredData=vm.fdata.filter((元素,索引)=>{
if(临时索引)(要素日期){
//错误
log(`error,no response`);
犯错误;
});
PS:我在ES6中使用angular 1.6。 提前谢谢
BRJ

您可以使用哈希表作为日期,并收集所有的
id\u pa
以供以后计数

var data=[{date:“2016-11-18 19:20:42”,id_-pa:“7”},{date:“2016-11-18 19:04:55”,id_-pa:“5”},{date:“2016-11-19 20:53:42”,id_-pa:“7”},{date date date 2016-11-19 20:53:43,id_-pa:“7”{date date date 2016-11-11-20:49:42,id_-pa:“date 2016-11-20:45,{“2016-11-20 20:50:46”,同上:“7”},
hash=Object.create(null),
结果;
data.forEach(函数(a){
var-date=a.date.slice(0,10);
hash[date]=hash[date]| | Object.create(null);
hash[date][a.id\u pa]=true;
});
result=Object.keys(hash.map)(date=>({date,num_pa:Object.keys(hash[date]).length}));
console.log(结果);

。作为控制台包装{max height:100%!important;top:0;}
您可以使用哈希表作为日期,并收集所有
id\u pa
供以后计数

var data=[{date:“2016-11-18 19:20:42”,id_pa:“7”},{date:“2016-11-18 19:04:55”,id_pa:“5”},{date:“2016-11-19 20:53:42”,id_pa:“7”},{date date date:“2016-11-19 20:53:43”,id_pa:“7”{date date date 2016-11-11-20:49:42,id_pa:“date 7:20:45,{2016-11-20 20:50:46“,同上:“7”},
hash=Object.create(null),
结果;
data.forEach(函数(a){
var-date=a.date.slice(0,10);
hash[date]=hash[date]| | Object.create(null);
hash[date][a.id\u pa]=true;
});
result=Object.keys(hash.map)(date=>({date,num_pa:Object.keys(hash[date]).length}));
console.log(结果);

.as console wrapper{max height:100%!important;top:0;}
您可以将
reduce
链接到
map
调用中,并使用ES6
findIndex
方法查看对象当前是否存在于
reduce
函数创建的数组中

SwapSvc
    .getUsage (vm.id_fi)
    .then((data)=>{
        //console.log(`lreceived data: `+ JSON.stringify(data) );
        vm.fdata = data.map((elem) => {
        //console.log(`date: ${elem.date}`);
        //console.log(`id_pa: ${elem.id_pa}`);
        var d = new Date (elem.date);
        return{
            date:d.getDate()+'-'+d.getMonth()+'-'+d.getFullYear()/*elem.date*/,
            id_pa:elem.id_pa
        }}).reduce((p, c, i) => {
            var index = p.findIndex(x => x.date === c.date);
            if (index !== -1) p[index].num_pa++;
            else p.push({"date": c.date, "num_pa": 1})
            return p;
        }, [])

        console.log(`data after parsing and ordering: `+ JSON.stringify(vm.fData) ); 
        return data;
    })

您只需将
reduce
链接到
map
调用中,并使用ES6
findIndex
方法查看对象当前是否存在于由
reduce
函数创建的数组中

SwapSvc
    .getUsage (vm.id_fi)
    .then((data)=>{
        //console.log(`lreceived data: `+ JSON.stringify(data) );
        vm.fdata = data.map((elem) => {
        //console.log(`date: ${elem.date}`);
        //console.log(`id_pa: ${elem.id_pa}`);
        var d = new Date (elem.date);
        return{
            date:d.getDate()+'-'+d.getMonth()+'-'+d.getFullYear()/*elem.date*/,
            id_pa:elem.id_pa
        }}).reduce((p, c, i) => {
            var index = p.findIndex(x => x.date === c.date);
            if (index !== -1) p[index].num_pa++;
            else p.push({"date": c.date, "num_pa": 1})
            return p;
        }, [])

        console.log(`data after parsing and ordering: `+ JSON.stringify(vm.fData) ); 
        return data;
    })

您是尝试从函数返回修改后的数据还是将其记录到控制台?首先,我想将其记录到控制台进行测试,但之后我想将数据显示在图形中。您是尝试从函数返回修改后的数据还是将其记录到控制台?首先,我想将其记录到控制台进行测试,但之后我想在图表中显示数据。谢谢它像一个符咒一样工作,这正是我在寻找的。谢谢它像一个符咒一样工作,这正是我在寻找的。谢谢它工作得很好,我会在将来考虑这个解决方案。谢谢它工作得很好,我以后会考虑这个解决方案。