javascript - 在 JavaScript 中格式化 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 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"
}]

我想构建一个 json 来显示日期和每天的 ID 数量。新的 Json 会是这样的:

[{
  "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 删除重复项,最后执行 < strong>.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;
    });

PS:我在 ES6 中使用 Angular 1.6。 提前致谢 BRJ

最佳答案

您可以使用哈希表来存储日期并收集所有 id_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: "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" }],
    hash = Object.create(null),
    result;

data.forEach(function (a) {
    var date = a.date.slice(0, 10);
    hash[date] = hash[date] || Object.create(null);
    hash[date][a.id_pa] = true;
});
result = Object.keys(hash).map(date => ({ date, num_pa: Object.keys(hash[date]).length }));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 在 JavaScript 中格式化 Json、删除重复项和计数元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43332743/

相关文章:

javascript - 连接下拉列表以在 Controller 中运行功能

Python高效反向列表JSON序列化

javascript - AngularJS:通过特定 JSON 文件中的新页面中的单击操作显示数据

javascript - 无法使用 jQuery 克隆具有单击功能的按钮

javascript - 将撇号传递给 javascript 函数

jquery - Angular JS和JQuery日期选择器

javascript - Angular 1.2升级后Angular UI-Select下拉值问题

javascript - 欢乐 javascript 导入

javascript - 使用 .trigger() 时追加多次

javascript (angularJS) : add current time to date and format