web-dev-qa-db-fra.com

Syntaxe droite de lambda javascript

J'essaie de définir des valeurs dans un objet en utilisant forEach lambda:

 var row = {title: "", attribute:"", width: ""};
 list.forEach( list =>
                 row.title = list.label |
                 row.attribute = list.label |
                 row.width = "300px"    
              );

Fonctionne bien uniquement avec une instruction row.title = list.label lorsque j'ajoute le reste des paramètres ne fonctionne pas bien.

Quelle est la bonne syntaxe?

5
Juan Reina Pascual

Essayer:

 var row = {title: "", attribute:"", width: ""};
 list.forEach( list => {
                 row.title = list.label;
                 row.attribute = list.label;
                 row.width = "300px"    
              });

Remarquez les accolades.

10
Nathan Montez

Vous avez besoin d'accolades, car la partie après le => est un corps de fonction:

 var row = {title: "", attribute:"", width: ""};
 list.forEach( list => {
   row.title = list.label;
   row.attribute = list.label;
   row.width = "300px";
 });

(Sachez que s'il s'agit du code que vous exécutez réellement, les valeurs dans row seront définies sur les valeurs de la dernière entrée de la liste.)

3
Digitalkapitaen

Vous devez envelopper les instructions non-retournées dans la fonction de flèche avec des accolades:

var list = [
  { label: 'one'   },
  { label: 'two'   },
  { label: 'three' }
];

var row = {title: "", attribute:"", width: ""};

list.forEach(list => {
  row.title = list.label;
  row.attribute = list.label;
  row.width = "300px";
  console.log('Row is', row);
  console.log();
});

1
terales

En l'état actuel, row conservera les données dans chacune de vos boucles de .forEach, de sorte que vous n'obtiendrez que les données du dernier élément traité. Vous voulez créer un nouvel objet pour stocker les données "pour chacune" de ces boucles, puis créer un tableau rempli.

var Row = (title, attribute, width) => {
  this.title = title;
  this.attribute = attribute;
  this.width = width;
};

var rows = [];
list.forEach( item => { 
  rows.Push(new Row(list.label, list.label, "300px"));
});

Sinon, la fonction map peut faire ce que vous voulez avec moins de code.

var rows = list.map( ( item ) => {
  return new Row(item.label, item.label, "300px");
});
0
Fauxecke