将函数应用于填充数字的对象

时间:2016-04-06 14:57:45

标签: javascript

我有这个简单的功能,可以在给定日期添加一定天数并获得新日期:

var adddays = 401;
var theDate = new Date(2014, 01, 01);
var myNewDate = new Date(theDate);
myNewDate.setDate(myNewDate.getDate() + adddays);
console.log(myNewDate);

我现在不是一次做一个日期,而是在这样的对象中获取日期:{543,563,601,629,650,672,698,718}

问题是如何通过此函数运行所有这些天来获取具有新格式化日期的对象。对象中的这些数字将替换adddays。我知道我需要一个for循环,但我对JS来说是个新手来解决它。

2 个答案:

答案 0 :(得分:2)

var theDate = new Date(2014, 01, 01);
var newDates = ([543,563,601,629,650,672,698,718]).map(function (e) {
  var adddays = e;
  var myNewDate = new Date(theDate);
  myNewDate.setDate(myNewDate.getDate() + adddays);
  console.log(myNewDate);
  return myNewDate;
})

var str = "{543,563,601,629,650,672,698,718}";
var theDate = new Date(2014, 01, 01);
var newDates = (str.substr(1,str.length-1).split(',')).map(function (e) {
  var adddays = parseInt(e,10);
  var myNewDate = new Date(theDate);
  myNewDate.setDate(myNewDate.getDate() + adddays);
  console.log(myNewDate);
  return myNewDate;
})

答案 1 :(得分:0)

您收到的字符串不是有效的javascript对象,看起来更像是一个数组。我们首先要将它从字符串转换为数组。

var daysToAdd = "{543,563,601,629,650,672,698,718}";
//Removing the {} brackets to turn it into a CSV
daysToAdd = daysToAdd.substring(1,daysToAdd.length-1)
//Using split to turn our values into an array
daysToAdd = daysToAdd.split(',');
//daysToAdd now looks like ["543","563","601","629","650","672","698","718"]

我们希望创建一个接受基础数据的函数,并返回调整后的日期以便重新使用。在我们的函数中,我们可以使用Array.map来调用数组中每个元素的函数

function addAllDaysToDate(daysToAdd,referenceDate){
    var adjustedDays = daysToAdd.map(function(addDays){
         var date = new Date();
         //+variable is shorthand for parseInt(variable);
         date.setDate(referenceDate.getDate() + (+addDays));
         return date;
    });
    //Our adjustedDays is now an array of Date objects 
    return adjustedDays;
}

然后我们可以使用我们的函数来获取调整后的日期

var theDate = new Date(2014, 01, 01);
var myNewDates = addAllDaysToDate(daysToAdd,theDate)