lambda javascript的正确语法

时间:2016-11-21 13:32:48

标签: javascript foreach lambda

我正在尝试使用forEach lambda在对象中设置一些值:

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

当我添加其余参数时,仅使用语句row.title = list.label才能正常工作。

什么是正确的语法?

4 个答案:

答案 0 :(得分:13)

尝试:

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

注意花括号。

答案 1 :(得分:3)

您需要大括号,因为=>之后的部分是函数体:

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

(请注意,如果这是您实际运行的代码,row中的值将设置为列表中最后一个条目的值。)

答案 2 :(得分:1)

你应该用箭头括号在箭头函数中包装非返回语句:

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();
});

答案 3 :(得分:0)

现在row将保存.forEach的每个循环中的数据,因此您将只获取已处理的最后一个元素的数据。您希望创建一个新对象来存储数据"对于每个"这些循环,然后有一个填充数组。

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"));
});

或者,map函数可以在更少的代码中执行您想要的操作。

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