Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

246
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda