使用来自数据库和生成的JavaScript的数据创建JSON

时间:2016-02-05 17:30:34

标签: javascript jquery arrays json

我需要使用fullcalendar.io创建日历视图。对于某些日期,我在我的数据库中有一个特定的价格并且我检索它,但是对于某些日期(没有特定的价格),我需要将通常的费率放在我需要用JavaScript创建的对象中。现在的问题是因为我不知道如何为此制作JSON。

简而言之:我需要为每个日期定价,但有些日期我会从数据库中获取数据。如何在JavaScript中创建此类JSON对象?

我有这段代码:

var db_data = [
  {
    "id": 5,
    "user_id": 1,
    "article_id": 5,
    "title": "",
    "start": "2016-03-25 15:18:46"
  },
  {
    "id": 4,
    "user_id": 1,
    "article_id": 5,
    "price": 55,
    "title": "",
    "start": "2016-03-15 15:18:46"
  },
  {
    "id": 3,
    "user_id": 1,
    "article_id": 5,
    "price": 35,
    "title": "",
    "start": "2016-03-07 15:18:46"
  },
  {
    "id": 2,
    "user_id": 1,
    "article_id": 5,
    "price": 22,
    "title": "drugi",
    "start": "2016-03-05 15:18:46"
  },
  {
    "id": 1,
    "user_id": 1,
    "article_id": 5,
    "price": 44,
    "title": "prvi",
    "start": "2016-02-04 15:18:46"
  }
];

        // declare variables
        var period_start = new Date('2016-02-02'),
            period_end = new Date('2016-03-03'),
            current_date = period_start,
            array_of_all_dates = [];

        // Create a populated array of dates
       // Create a populated array of dates
        while (current_date.getTime() <= period_end.getTime()) {
          array_of_all_dates.push(current_date);
          current_date = new Date(+current_date);
          current_date.setDate(current_date.getDate() + 1);
        }

        // Now loop over the array of populated dates and mutate, so something like
        array_of_all_dates = array_of_all_dates.map(function (date) {
          var found_in_db = db_data.filter(function (db_data) {
            return new Date(db_data.start.replace(" ", "T")).getTime() === date.getTime(); // You need to do this comparison better!
          });
          if (found_in_db.length > 0) {
            return found_in_db[0];
          }
          var new_object = {
            title: '',
            start: date,
            price: '{{$article->price}}'
          };
          console.log(new_object);
          return new_object;

        });



        console.log('result'+array_of_all_dates);
        drawCalendar(array_of_all_dates);

使用此代码,我从数据库和日期(开始)获取数据,这些数据在我使用JavaScript创建的数据库中并不存在。

但是通过这个功能,我得到了这些数据而且我无法创建日历: enter image description here

我也尝试过这个:

// Now loop over the array of populated dates and mutate, so something like
    array_of_all_dates = array_of_all_dates.map(function (date) {
      var found_in_db = db_data.filter(function (db_data) {
        var db_data_date = new Date(db_data.start.replace(" ", "T"));
        return db_data_date.getFullYear() === date.getFullYear() &&
                        db_data_date.getMonth() === date.getMonth() &&
                db_data_date.getDay() === date.getDay();
      });
      if (found_in_db.length > 0) {
        return found_in_db[0];
      }
      var new_object = {
        a_property: 'some_default_value',
        start: date
      };
      console.log(new_object);
      return new_object;

    });

但目前我得到了这个: enter image description here

1 个答案:

答案 0 :(得分:2)

我不明白这是怎么回事:

new Date(db_data.start.replace(" ", "T")).getTime() === date.getTime()

可以是true。 db_data中的日期在"2016-03-15 15:18:46"中设置了时间,但您在array_of_all_dates中创建的日期不会Date('2016-02-02')

你的第二次约会似乎有效,但我不清楚你希望它是什么结果:

 array_of_all_dates.map( ... );

在某些情况下,您将从db_data返回一个如下所示的元素:

{ "id": 5", "user_id": 1, "article_id": 5, "title": "", "start": "2016-03-25 15:18:46" }

如果没有“匹配”,则返回一个如下所示的对象:

{ a_property: 'some_default_value', start: date }

请注意,array_of_all_dates的所有原始元素都将替换为此操作。

您希望在array_of_all_dates中结束什么,以便将其传递给drawCalendar