javascript - TypeError: params[item].split är inte en funktion


Konsolen visar FEL TypeError: params[item].split är inte en funktion. All hjälp uppskattas. Den bästa hjälpen skulle vara att förstå mitt fel i hur jag närmar mig detta problem.

routeReady() {
    this.activeRoute.queryParams
        .pipe(switchMap(params => {
            if (!params['filter']) {
                // use previous month as default
                let date : Date = new Date();
                date.setDate(1);
                date.setMonth(date.getMonth() - 1);
                this.formData.startDate = DateUtils.dateToText(date);
                date.setDate(DateUtils.getDaysInMonth(date));
                this.formData.endDate = DateUtils.dateToText(date);
            }
            ['startDate', 'endDate', 'club'
                , 'subscription', 'sold'].forEach(item => {
                if (item in params && params[item] !== '') {
                    this.formData[item] = params[item];
                }
            });
            ['courts', 'groups', 'zones'].forEach(item => {
                if (item in params && params[item] !== '') {
                    this.formData[item] = params[item].split(',');
                }
            });
            return Promise.resolve(true);
        }))
        .subscribe();
}

Det här är mitt fel:

Svar #1

Det är för att det inte är ett vanligt föremål. Det är någon slags kantig magisk grej. För att få värdet måste du göra.

params.get('whatever property');

i ditt fall

params.get(item).split(',');

Att utöka vad jag skulle göra i ditt fall.

['courts', 'groups', 'zones'].forEach(item => {
  const value = params.get(item);

  if (value) {
    this.formData[item] = value.split(',');
  }
});

Svar #2

Denna kod förutsätter att params[item] är en sträng:

this.formData[item] = params[item].split(',')

JavaScript-strängar har en split-metod:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split

Om det inte är en sträng kommer det inte att ha en split-metod och därför kommer du att få veta:

params[item].split är inte en funktion

För att kontrollera dess typ gör:

console.log('params[item]', params[item], typeof params[item])