【问题标题】:How to generate json by comparing both array(date) and array of objects?如何通过比较数组(日期)和对象数组来生成 json?
【发布时间】:2018-08-01 08:56:51
【问题描述】:

我想比较 node.js 中的数组和对象数组,并根据比较生成一个新的 json 对象。 在下面的代码中,我有 "dateList" 日期列表和 result 有 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
  }
]

请帮忙

【问题讨论】:

    标签: arrays json date for-loop


    【解决方案1】:

    else 分支位于内部数组中,但是只有当内部循环没有在result 中找到给定日期时,您才想推送0-entry,您只知道循环结束的时间(新变量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)

    【讨论】:

    • 以上两种方法工作正常,第二种方法逻辑非常好。谢谢。:)
    猜你喜欢
    • 1970-01-01
    • 2020-09-24
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多