J'essaye de coder ceci dans ES6. Voici ce que j'essaie de réaliser. Disons que j'ai un tableau d'objets appelé schools
.
let schools = [
{name: 'YorkTown', country: 'Spain'},
{name: 'Stanford', country: 'USA'},
{name: 'Gymnasium Achern', country: 'Germany'}
];
Maintenant, je veux écrire une fonction appelée editSchoolName
qui prendra 3 paramètres, schools
(qui est le tableau que j'ai défini ci-dessus), oldName
et name
.
Je vais passer le nom de l'école dans le paramètre oldName
et ce nom devrait être mis à jour avec la valeur dans le paramètre name
.
Je ne veux pas changer l'état de la variable schools
, alors j'utilise une fonction map
qui retournera un nouveau tableau avec les modifications.
La fonction editSchoolName
s'appellera comme ceci -
var updatedSchools = editSchoolName(schools, "YorkTown", "New Gen");
Ici, le nom YorkTown
doit être remplacé par le nom New Gen
. Donc, la valeur attendue du tableau updatedSchools
devrait être -
let updatedSchools = [
{name: 'New Gen', country: 'Spain'},
{name: 'Stanford', country: 'USA'},
{name: 'Gymnasium Achern', country: 'Germany'}
];
Voici à quoi ressemble ma fonction editSchoolName -
const editSchoolName = (schools, oldName, name) =>
schools.map(item => {
if (item.name === oldName) {
/* This is the part where I need the logic */
} else {
return item;
}
});
Vous avez besoin d’aide pour modifier la fonction editSchoolName
afin d’obtenir le résultat souhaité mentionné ci-dessus.
essayez ceci, ES6 Object.assign()
pour créer une copie d’un élément de tableau et mettre à jour un nouvel objet.
let schools = [{
name: 'YorkTown',
country: 'Spain'
},
{
name: 'Stanford',
country: 'USA'
},
{
name: 'Gymnasium Achern',
country: 'Germany'
}
];
const editSchoolName = (schools, oldName, name) => {
return schools.map(item => {
var temp = Object.assign({}, item);
if (temp.name === oldName) {
temp.name = name;
}
return temp;
});
}
var updatedSchools = editSchoolName(schools, "YorkTown", "New Gen");
console.log(updatedSchools);
console.log(schools);
Vous devez retourner l'objet mis à jour:
const editSchoolName = (schools, oldName, name) =>
schools.map(item => {
if (item.name === oldName) {
return {...item, name};
} else {
return item;
}
});
const editSchoolName = (schools, oldName, newName) =>
schools.map(({name, ...school }) => ({ ...school, name: oldName === name ? newName : name }));
Vous pouvez le raccourcir en utilisant un ternaire.
Si vous souhaitez modifier uniquement la partie commentée:
const editSchoolName = (schools, oldName, name) =>
schools.map(item => {
if (item.name === oldName) {
var newItem = Object.assign({},item);
newItem.name = name;
return newItem;
}
else{
return item;
}
});
Je me demande pourquoi aucune des réponses ne donne une solution simple
const editSchoolName = (schools, oldName, newName) =>
schools.map(school => { if (school.name === oldName) school.name = newName;
return school;
});