强调每个并扩展

underscore each and extend

大家好,我很难理解我该如何解决问题。

我有 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>

任何人都可以帮助我了解我做错了什么?

我还不是 "satisfied" 预期的结果,但我会试一试。

这将在同一个数组中连续添加天数,没有任何分隔。

[
  { 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);

我相信如果您简化 addTimeSlot 函数,您会得到想要的结果。

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

如果我没理解错的话,你的 slotNumber 属性似乎只是索引号。由于您在 each 方法中使用 addTimeSlot 函数,因此您可以只使用索引号本身。

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