arrays - 如何通过比较数组(日期)和对象数组来生成 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
}
]
请帮助
解决方案
该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)
推荐阅读
- python - Sage python3 jupyter笔记本
- python - 打印所有托管实例时出现 Boto3 KeyError
- javascript - 使用 express 显示消息
- python - 枚举回馈字母作为值而不是单词
- json - 在 Azure 数据工厂 v2 中对 REST Web 服务使用 JSON 正文查询
- android - “bylazy”在Android-Kotlin中的应用是什么?
- excel - Range.Find 在查找失败时产生错误
- javascript - 将数组转换为没有键的对象
- hibernate - 如何使用 CriteriaQuery API 在 ComponentType 中执行 LEFT_JOIN
- python - running 2 while True 一次循环