Hola, estoy desarrollando una aplicación web en Angular 5. Tengo una matriz y quiero actualizar la misma matriz en función del valor de otra matriz. Por ejemplo, tengo createarray como a continuación.

enter image description here

Tengo otro objeto como a continuación.

data:{
checked:true,
name:infomodel
}

Ahora se verifica verdadero en los datos. Entonces, para infomodel en createarray, quiero actualizar la propiedad marcada.

Lo intenté como a continuación.

           let copyCreate = Object.assign({}, node.data);
            copyCreate.checked = true;
            const targetIdxCreate = this.createnode.map(item => item.name).indexOf(copyCreate.name);
            this.createnode[targetIdxCreate] = copyCreate;

            let copyUpdate = Object.assign({}, node.data);
            copyUpdate.checked = false;
            const targetIdxUpdate = this.updatenode.map(item => item.name).indexOf(copyUpdate.name);
            this.updatenode[targetIdxUpdate] = copyUpdate;

En el código anterior, actualiza createnode marcado con verdadero. También estoy haciendo updatenode en falso. Después de ejecutar el código anterior, ambas matrices habrán verificado la propiedad false.

Alguien me puede ayudar a hacer esto?

0
Niranjan 14 sep. 2018 a las 10:23

3 respuestas

La mejor respuesta

Sugeriría agregar la verificación basada en el campo 'id' que tiene en su registro con el que desea actualizar. En ese caso, la forma ideal de actualizar el registro sería la siguiente:

// Assuming updateWith is the object that you want to update with
const targetIdx = this.createnode.map(item => item.id).indexOf(this.updateWith.id);
this.createnode[targetIdx] = this.updateWith;

Si aún prefiere usar 'nombre' como parámetro para el que desea verificar la condición, simplemente puede cambiar la identificación al nombre en la función de mapa de la siguiente manera:

// Assuming updateWith is the object that you want to update with
const targetIdx = this.createnode.map(item => item.name).indexOf(this.updateWith.name);
this.createnode[targetIdx] = this.updateWith;

Espero que esto resuelva su problema :)

1
Sandeep K Nair 14 sep. 2018 a las 07:37

Intenta reemplazar tu código con esto

let item = this.createnode.find(item => item.name == data.name)
item.checked = data.checked;
this.createnode = [...this.createnode, item];
1
Maksym Shevchenko 14 sep. 2018 a las 07:39

Simplemente use array = array.slice(). Eso creará un nuevo objeto de matriz, activará ChangeDetection, etc.

1
Daddelbob 14 sep. 2018 a las 07:37