强调每一个并扩展

时间:2017-05-25 10:45:22

标签: javascript underscore.js

嗨,伙计们,我很难理解如何解决问题。

我有7个日期,我必须为每个日期添加六个不同时间值的值,结果需要看一下。

{
"dateTime": "2017-05-25T09:20:58.846Z",
    "timeSlotArray": 
      {
        "available": true,
        "placeAfter": "string",
        "placeBefore": "string",
        "slotNumber": 0
      }
}

{
"dateTime": "2017-05-25T09:20:58.846Z",
    "timeSlotArray": 
      {
        "available": true,
        "placeAfter": "string",
        "placeBefore": "string",
        "slotNumber": 1
      }
}
{
"dateTime": "2017-05-25T09:20:58.846Z",
    "timeSlotArray": 
      {
        "available": true,
        "placeAfter": "string",
        "placeBefore": "string",
        "slotNumber": 2
      }
}

{
"dateTime": "2017-05-25T09:20:58.846Z",
    "timeSlotArray": 
      {
        "available": true,
        "placeAfter": "string",
        "placeBefore": "string",
        "slotNumber": 3
      }
}

{
"dateTime": "2017-05-25T09:20:58.846Z",
    "timeSlotArray": 
      {
        "available": true,
        "placeAfter": "string",
        "placeBefore": "string",
        "slotNumber": 4
      }
}

{
"dateTime": "2017-05-25T09:20:58.846Z",
    "timeSlotArray": 
      {
        "available": true,
        "placeAfter": "string",
        "placeBefore": "string",
        "slotNumber": 5
      }
}

但是我没有将每个数字添加到slotNumber

var startDate = new Date()
var endDate = new Date(startDate.getTime() + 7 * 24 * 60 * 60 * 1000);

var date = new Array()

for (var iDate = new Date(); iDate < endDate; iDate.setDate(iDate.getDate() + 1)) {
  date.push(iDate)
}

var numbers = [0, 1, 2, 3, 4, 5]

addDateData = function(x) {
  return {
    date: x,
    timeSlot: {}
  }
}

addTimeSlot = function(x) {
  _.each(numbers, function(y) {
    _.extend(x.timeSlot, {
      available: true,
      placeAfter: "",
      placeBefore: "",
      slotNumber: y
    })
  })
}

var data = _.chain(date)
  .map(addDateData)
  .each(addTimeSlot)
  .value()
  
console.log(data);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

谁能帮我理解我做错了什么?

2 个答案:

答案 0 :(得分:1)

我仍然不满意预期的结果,但我会试一试。

这将在相同的数组中连续添加日期而不会有任何分离。

[
  { day: 1, timeSlot: 0 },
  { day: 1, timeSlot: 1 },
  { day: 2, timeSlot: 0 },
  { day: 2, timeSlot: 1 },
  //...
]

var startDate = new Date(),
    endDate = new Date(startDate.getTime() + 7 * 24 * 60 * 60 * 1000),
    numbers = [0, 1, 2, 3, 4, 5],
    date = [];

for (var iDate = new Date(); iDate < endDate; iDate.setDate(iDate.getDate() + 1)) {
  numbers.forEach(function(n) {
    date.push({
      date: new Date(iDate),
      timeSlot: {
        available: true,
        placeAfter: "string",
        placeBefore: "string",
        slotNumber: n
      }
    });
  });
}

console.log(date);

答案 1 :(得分:0)

我相信如果您简化addTimeSlot功能,您将获得所需的结果。

&#13;
&#13;
addTimeSlot = function(x, index) {
  _.extend(x.timeSlot, {
    available: true,
    placeAfter: "",
    placeBefore: "",
    slotNumber: index
  })
}
&#13;
&#13;
&#13;

如果我理解正确,看起来您的slotNumber属性只是索引号。由于您在addTimeSlot方法中使用each函数,因此您可以自己使用索引号。

演示:https://jsfiddle.net/yffvw126/