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
Dizz 8 nov. 2019 à 12:03

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

1
Saurabh Yadav 8 nov. 2019 à 09:52

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)
0
mplungjan 8 nov. 2019 à 09:37

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;
   }
  }
 }
}
0
Amir Makram 8 nov. 2019 à 09:22