0
I have an object array that’s coming from my API that I’m saving on state
const state = {
books: [{name: "Maria", age:"22"},{name:"Roberto", age:20}]
}
how to change Roberto’s age in this case? what would be the ways to do this?
0
I have an object array that’s coming from my API that I’m saving on state
const state = {
books: [{name: "Maria", age:"22"},{name:"Roberto", age:20}]
}
how to change Roberto’s age in this case? what would be the ways to do this?
3
Use the method .find()
of the matrix and Filter by the reference you want and change the values inside the objects
const state = {
books: [{name: "Maria", age:"22"},{name:"Roberto", age:20}]
}
state.books.find(x => {
return x.name === 'Roberto' ? x.age = 0 : null
})
console.log(state)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find
1
You first need to "find" the Obert in your 'base', then you can change its age, see:
const state = {
books: [{name: "Maria", age:"22"},{name:"Roberto", age:20}]
};
robertos = state.books.filter(function (obj){ return obj.name === 'Roberto'});
if (robertos.length>0){
robertos[0].age = "40"
};
console.log(state);
EDIT:
buscaNomeEAltera = function (nome, novos_dados){
buscados = state.books.filter(function (obj){ return obj.name === nome});
if (buscados.length===1){
buscados[0] = Object.assign(buscados[0], novos_dados)
};
};
buscaNomeEAltera('Roberto', {name: 'João', age: 20});
how would I generalize? for example if I wanted to change several attributes?
You would have to further sophisticate the solution, creating a function (for example) that would receive the name you are looking for and the object with the new values and doing one of the objects like this: obj2 = Object.assign(robertos[0], {nome: 'James', idade: 28})
1
I researched my case and I managed to find an ideal way to solve, I left comments in the code to help explain.
const state = {
books: [{name: "Maria", age:"22"},{name:"Roberto", age:20}]
}
const data = {
name: "Roberto Silva",
age: 34
}
// acha o index do objeto especifico
const objIndex = state.books.findIndex(objs => objs.name === "Roberto");
// agora o objeto recebe as alteraçõs recebidas
const updatedObj = { ...this.capitulos[objIndex], ...data };
// nessa etapa irei fazer a reconstrução do objeto
// eu pego todos os objetos do 0 até o index do objeto modificado
// depois coloco o objeto modificado
// e pra finalizar pego todos os objetos a partir do objeto modificado ate o final
const updatedBooks = [
...state.books.slice(0, objIndex),
updatedObj,
...state.books.slice(objIndex + 1)
];
// agora o books vai receber o novo estado
state.books = updatedBooks;
Documentation of the functions used
Browser other questions tagged javascript
You are not signed in. Login or sign up in order to post.
and if I want to change age and name?
– Davi Wesley
vc would just have to do the "checks" on "x" object filtering by its properties
– Lauro Moraes