【发布时间】:2019-06-20 03:05:19
【问题描述】:
我正在创建一个像调度程序一样运行的小型 Angular 应用程序。 它允许用户提供名称、开始和结束日期,并通过表单检查布尔复选框。
我的问题是我试图将每个用户条目的名称推送到数组中的特定日期,例如26/01/2019 将具有以下名称:“James”、“Mark”、“Luke”等,都在同一天,具体取决于用户通过表单输入。
在我的循环中,我为日期范围内的每个日期推送一个新对象,但无法找到将名称推送到每个日期对象内的字符串数组的方法。
我试图在另一个推送中将值推送到数组,这一直给我错误。
我注意到,如果我将循环中的 name 字段的值设置为“[value]”,由于某种原因它不会出错,但不知道为什么。
循环完成后,我想提醒生成的对象数组,但是当我编写代码执行此操作时,我收到“未定义”的提醒。值没有保存到数组中吗?
import { Component, OnInit } from '@angular/core';
import { NgForm } from '@angular/forms';
import { IPreferences } from '../ipreferences';
import { DatePipe } from '@angular/common';
import * as moment from 'moment';
@Component({
selector: 'app-customer-form',
templateUrl: './customer-form.component.html',
styleUrls: ['./customer-form.component.css']
})
export class CustomerFormComponent implements OnInit {
title = 'Preference Form';
preferences: IPreferences;
dateObj: { }; // to be array of Date objects containing Name sub-arrays
nameArray: string[];
date = new Date();
constructor(public datepipe: DatePipe) {
this.preferences = {
name: '',
dateFrom: null,
dateTo: null,
everyday: null
}
}
getDates(startDate, endDate){
var dates = [],
currentDate = startDate,
addDays = function(days) {
var date = new Date(this.valueOf());
date.setDate(date.getDate() + days);
return date;
};
while (currentDate <= endDate) {
dates.push(currentDate);
currentDate = addDays.call(currentDate, 1);
}
return dates;
}
savePreferences(form): void {
var savedName:string = this.preferences.name;
var formatDateFrom:string = moment(this.preferences.dateFrom).format("YYYY-MM-DD");
var formatDateTo:string = moment(this.preferences.dateTo).format("YYYY-MM-DD");
var savedEveryday:Boolean = this.preferences.everyday;
var savedDateFrom:Date = new Date(formatDateFrom);
var savedDateTo:Date = new Date(formatDateTo);
var dateRange = this.getDates(savedDateFrom, savedDateTo);
if(!!savedEveryday){
for(var i = Number(savedDateFrom); i <= Number(moment(savedDateFrom).format("YYYY-MM-DD") + 90); i++){ // 90 and not infinite as due to time constraints i intended to print
// the first 90 dates regardless of scenario, so if a user selected to receive marketing info daily it would of "appeared" to be daily
this.nameArray.push(savedName) // pushing name strings to nameArray
}
}
if(!savedEveryday) {
dateRange.forEach(date => {
this.nameArray.push(savedName) // pushing name strings to nameArray
})
this.dateObj[Number(this.date)] = {
name: this.nameArray // attempting to set name property of objects in array to nameArray strings (2d array)
}
}
alert(this.nameArray.length); // attempting to test by having a pop up of the object array (Dates) with their corresponding names returned
}
实际结果是“未定义”的警报。
我希望看到数组中的对象警报。每个对象都有不同的日期,并且每个对象中都有不同名称的数组。
【问题讨论】:
标签: javascript arrays node.js angular typescript