Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

244
Views
¿Por qué esta función no reemplaza el valor existente en la matriz asociativa? Angular

Me aseguré de importar mi interfaz:

 import { DayMoodModel } from '../objectModels/dayMood';

Inicialicé la matriz de objetos con algunos datos de prueba (la propiedad de fecha tiene el tipo Fecha, en caso de que se lo pregunte):

 moodsAssigned: DayMoodModel[] = [ { date: this.today, mood: 'great' } ]

Esta es la función en cuestión:

 addMood(moodName: string) { let obj: DayMoodModel = { date: this.currentDay, mood: moodName }; for(let i = 0; i < this.moodsAssigned.length; i++) { if(this.moodsAssigned[i].date == this.currentDay) { this.moodsAssigned[i].mood = moodName; } else if(i == this.moodsAssigned.length - 1 && this.moodsAssigned[i].date != this.currentDay) { this.moodsAssigned.push(obj); } } console.log(this.moodsAssigned); }

Cuando se llama, en una fecha que ya está en la matriz de objetos, actúa como si los datos no estuvieran allí para esa fecha. Incluiré una foto del registro de la consola en la parte inferior de la publicación. En esta prueba, llamé a la función en la fecha que ya está en la matriz, esperando que reemplace el valor de 'estado de ánimo' con el nuevo estado de ánimo, pero solo agregó un nuevo objeto a la matriz.

Revisé este código varias veces, cerrando la sesión de las variables en lugares clave para asegurarme de que está leyendo todo correctamente. no se que le pasa a la logica...

imagen de la matriz registrada en la consola

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

El problema es que estás tratando de comparar dos objetos complejos, pero solo te importa el día, el mes y el año. Solo un == directo no va a funcionar.

Aquí hay una función de comparación adecuada de otra pregunta: ¿Cómo saber si dos fechas están en el mismo día o en la misma hora?

 function sameDay(d1, d2) { return d1.getFullYear() === d2.getFullYear() && d1.getMonth() === d2.getMonth() && d1.getDate() === d2.getDate(); }

Sin embargo, si no desea duplicados, en lugar de buscar por fuerza bruta en una matriz, puede utilizar cadenas ISO (YYYY-MM-DDTHH:MM:SS) como claves en un Map . Puede tomar los primeros 10 caracteres si no le importa la marca de tiempo.

 import { Component, OnInit } from '@angular/core'; @Component({ selector: 'app-test', templateUrl: './test.component.html', styleUrls: ['./test.component.scss'], }) export class TestComponent implements OnInit { today = this.getISO(new Date()); moodsAssigned = new Map<string, string>([ [this.today, 'great'], ]); constructor() {} ngOnInit(): void {} getISO(date: Date) { return date.toISOString().substring(0, 10); } addMood(moodName: string) { this.moodsAssigned.set(this.today, moodName); } }

También puede volver a convertir una cadena ISO en un objeto de Date con el constructor de Date ; tanto AAAA-MM-DDTHH:MM:SS como AAAA-MM-DD funcionan.

 const today = new Date("2022-01-30")
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!