ForEach函数返回未定义的值以及预期的输出

时间:2019-06-03 13:35:17

标签: javascript

我正在做一个JavaScript练习,我们应该在其中使用ES6的元素,例如类,箭头函数等。应该使用此特定代码来输出公园名称以及每个公园的树木密度数据。

我可以将每个对象单独硬编码到控制台中,但是我想使我的解决方案具有可伸缩性,并尽可能接近实际应用程序。但是,我无法使treeDensityReport函数正常工作。

class Element {
  constructor(name, yearBuilt) {
    this.name = name;
    this.yearBuilt = yearBuilt;
  }
}

class Park extends Element {
  constructor(name, yearBuilt, trees, area) {
    super(name, yearBuilt);
    this.trees = trees;
    this.area = area;

    this.treeDensity = (() => this.trees / this.area)();

    this.parkAge = () => new Date().getFullYear() - this.yearBuilt;
  }
}

const parks = [];
let parkAges = [];

parks.push(park1 = new Park('Washington park', 1999, 1440, 300));
parks.push(park2 = new Park('Lincoln  park', 1984, 2550, 1000));
parks.push(park3 = new Park('Jefferson park', 2000, 2000, 455));

parkAges = parks.map(park => park.parkAge());

let averageParkAge = (parkAges.reduce((total, age) => total + age)) / parkAges.length;

function treeDensityReport(arr) {
  let string1;
  arr.forEach(function(element) {
    let string = `${element.name} has a tree density of ${element.treeDensity} \n`;
    string1 += string;
  });
  
  return string1;
}

console.log(`------PARKS REPORT------\n
Our ${parks.length} parks have an average age of ${averageParkAge} years.\n${treeDensityReport(parks)}
`)

我可以按预期看到控制台中的名称和密度,但是由于某种原因,该函数也返回未定义。这是控制台输出:

  

未定义华盛顿公园的树木密度为4.8

     

林肯公园的树木密度为2.55

     

杰斐逊公园的树木密度为4.395604395604396

这个不确定的来源是什么?我想念什么?

2 个答案:

答案 0 :(得分:2)

let string1将string1定义为undefined。串联字符串时,JavaScript确实很有趣,最终将字符串按字面意义添加为“未定义”。

试试看

let string1 = ''

答案 1 :(得分:0)

treeDensityReport的第一行中,您必须为string1分配一个空字符串。 声明变量时,它是undefined的默认值