首页 > 解决方案 > 如何通过比较数组(日期)和对象数组来生成 json?

问题描述

我想比较 node.js 中的数组和对象数组,并根据比较生成一个新的 json 对象。在下面的代码中,我有日期和结果的“dateList”列表,其中包含 json 数组,现在我想比较 dateList 和结果,如果结果对象具有 dateList 的日期,那么我们必须获取执行值并推入新的数组如果不相等,那么我们必须推为 0。

服务器代码:

var dateList = [
  "2018-08-01",
  "2018-07-31",
  "2018-07-30",
  "2018-07-29",
  "2018-07-28",
  "2018-07-27",
  "2018-07-26"
]
var result = [{
    CDate: '2018-07-31',
    executions: 1
  },
  {
    CDate: '2018-07-30',
    executions: 2
  },
  {
    CDate: '2018-07-27',
    executions: 3
  },
  {
    CDate: '2018-07-26',
    executions: 2
  }
];
var allList = [];

for (key in dateList) {
  for (keyResult in result) {
    if (dateList[key] === result[keyResult].CDate) {
      var obj = {
        "date": dateList[key],
        "value": result[keyResult].executions
      }
      allList.push(obj);
      break;
    } else {
      var obj = {
        "date": dateList[key],
        "value": 0
      }
      allList.push(obj)
      break;

    }
  }

}
console.log(allList);

电流输出:

[{
    "date": "2018-08-01",
    "value": 0
  },
  {
    "date": "2018-07-31",
    "value": 1
  },
  {
    "date": "2018-07-30",
    "value": 0
  },
  {
    "date": "2018-07-29",
    "value": 0
  },
  {
    "date": "2018-07-28",
    "value": 0
  },
  {
    "date": "2018-07-27",
    "value": 0
  },
  {
    "date": "2018-07-26",
    "value": 0
  }
]

预期输出:

[{
    "date": "2018-08-01",
    "value": 0
  },
  {
    "date": "2018-07-31",
    "value": 1
  },
  {
    "date": "2018-07-30",
    "value": 2
  },
  {
    "date": "2018-07-29",
    "value": 0
  },
  {
    "date": "2018-07-28",
    "value": 0
  },
  {
    "date": "2018-07-27",
    "value": 3
  },
  {
    "date": "2018-07-26",
    "value": 2
  }
]

请帮助

标签: arraysjsondatefor-loop

解决方案


else分支位于内部数组内,但是0-entry只有当内部循环未在 中找到给定日期时result,您才想推送 a ,您只知道循环何时结束(新变量found跟踪它):

var dateList = [
  "2018-08-01",
  "2018-07-31",
  "2018-07-30",
  "2018-07-29",
  "2018-07-28",
  "2018-07-27",
  "2018-07-26"
]
var result = [{
    CDate: '2018-07-31',
    executions: 1
  },
  {
    CDate: '2018-07-30',
    executions: 2
  },
  {
    CDate: '2018-07-27',
    executions: 3
  },
  {
    CDate: '2018-07-26',
    executions: 2
  }
];
var allList = [];

for (key in dateList) {
  var found=false;
  for (keyResult in result) {
    if (dateList[key] === result[keyResult].CDate) {
      var obj = {
        "date": dateList[key],
        "value": result[keyResult].executions
      }
      allList.push(obj);
      found=true;
      break;
    }// else {
  }
  if(!found){
    var obj = {
      "date": dateList[key],
      "value": 0
    }
    allList.push(obj)
    //break;
  }
}
console.log(allList);

另一种方法是0-entry在开始时创建一个从内部循环更新它并在最后推送:

var dateList = [
  "2018-08-01",
  "2018-07-31",
  "2018-07-30",
  "2018-07-29",
  "2018-07-28",
  "2018-07-27",
  "2018-07-26"
]
var result = [{
    CDate: '2018-07-31',
    executions: 1
  },
  {
    CDate: '2018-07-30',
    executions: 2
  },
  {
    CDate: '2018-07-27',
    executions: 3
  },
  {
    CDate: '2018-07-26',
    executions: 2
  }
];
var allList = [];

for (key in dateList) {
  var obj = {
    "date": dateList[key],
    "value": 0
  };
  for (keyResult in result) {
    if (dateList[key] === result[keyResult].CDate) {
      obj.value=result[keyResult].executions;
      break;
    }
  }
  allList.push(obj)
}
console.log(allList)


推荐阅读