2016-04-06 5 views
0

Я имею эту простую функцию, которая добавляет определенное количество дней до указанной даты и получает новую дату:Применить функцию объекта заполнены числами

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

Вместо того, чтобы делать одну дату, в то время, я m теперь получаю даты в виде объекта: {543,563,601,629,650,672,698,718}

Вопрос в том, как я могу выполнять все эти дни через эту функцию, чтобы получить объект с новыми отформатированными датами. Эти числа в объекте заменяют adddays. Я знаю, что мне нужен цикл for, но я немного новичок в JS, чтобы понять это.

+0

объект или массив? Кроме того, есть много руководств по JavaScript, которые могут научить вас о циклах, таких как http://eloquentjavascript.net/02_program_structure.html или https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Loops_and_iteration. –

+0

Я предполагаю, что вы используете массив, а не объект: '[543,563,601,629,650,672,698,718]' – Andy

+0

@ Andy По какой-либо причине, что хранится в базе данных, это формат '{543,563,601,629,650,672,698,718}' – jonmrich

ответ

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; 
}) 
+0

Не забудьте присвоить результат var var varDate = ([543 ...]). Map..' – Pimmol

+0

Спасибо. Первый вариант работает нормально, а второй - больше того, что мне нужно, но я получаю сообщение об ошибке «Uncaught ReferenceError: ParseInt не определен» – jonmrich

+0

Изменено от ParseInt до parseInt и отлично работает. Благодарю. – jonmrich

0

Строка вы получаете не является допустимым JavaScript Object и выглядит как массив. Сначала нам нужно преобразовать его из строки в массив.

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) 
+0

'daysToAdd.substring (1, daysToAdd.length-1)' неверно. Это должно быть 'daysToAdd.substring (1, daysToAdd.length-2)'. –

Смежные вопросы