J'ai une liste déroulante indiquant que si la charge utile n'a pas d'ID, elle doit afficher "veuillez sélectionner" en ajoutant la valeur "selected: true" à l'objet dans le tableau d'éléments, mais si la charge utile a un ID utilisateur, elle doit être mise à cet objet utilisateurs.
code avant la charge utile
const users = {
label: {
text: 'Select User'
},
items: [
{
value: 'Please Select',
text: 'Please Select',
selected: true
},
{
value: '2',
text: 'Tom'
},
{
value: '3',
text: 'Dick'
},
{
value: '4',
text: 'Harry'
}
]
}
comment je veux que le code ressemble au code après la charge utile en fonction de la valeur entrante, la valeur 2 dans les éléments a maintenant sélectionné: vrai
payload = { value : 2 }
const users = {
label: {
text: 'Select User'
},
items: [
{
value: 'Please Select',
text: 'Please Select'
},
{
value: '2',
text: 'Tom',
selected: true
},
{
value: '3',
text: 'Dick'
},
{
value: '4',
text: 'Harry'
}
]
}
3 réponses
const users = {
label: {
text: 'Select User'
},
items: [
{
value: 'Please Select',
text: 'Please Select',
selected: true
},
{
value: '2',
text: 'Tom'
},
{
value: '3',
text: 'Dick'
},
{
value: '4',
text: 'Harry'
}
]
};
payload = { value : 2 };
let items = users.items.map(( o ) => {
if(o.selected) {
delete o.selected
}
if(Number(o.value) === Number(payload.value)) {
o.selected = true;
}
return o;
});
let result = {
label: {
text: 'Select User'
},
items: items
};
console.log(result);
Vous pouvez parcourir les éléments et ajouter de nouvelles propriétés sur les bases de la charge utile et supprimer d'autres propriétés sélectionnées
Notez que la valeur de votre charge utile n'était pas une chaîne, nous devons donc convertir en nombre pour comparer
var payload1 = { value : 2 }
var payload2 = { text : 'Dick' }
let users = { label: { text: 'Select User' },
items: [ { value: 'Please Select', text: 'Please Select' }, { value: '2', text: 'Tom', }, { value: '3', text: 'Dick' }, { value: '4', text: 'Harry' } ] }
const changeUser = (users, payload) => {
users.items.forEach(item => {
if (payload.value !== null && +item.value === +payload.value) {
item["selected"] = true;
} else if (payload.text !== null && item.text === payload.text) {
item["selected"] = true;
} else delete item["selected"];
})
return users
};
users = changeUser(users, payload1)
console.log(users)
users = changeUser(users, payload2)
console.log(users)
Vous pouvez ajouter la propriété selected
pour chaque objet avec la valeur par défaut false
, puis essayez de créer une fonction comme celle-ci
function changeProrertyValue(valueNumber){
for(item of user.items){
if(item.value===valuenumber){
if(item.selected){
item.selected = false;
}else{
item.selected = true;
}
}
}
}