我正在做一个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
这个不确定的来源是什么?我想念什么?
答案 0 :(得分:2)
let string1
将string1定义为undefined。串联字符串时,JavaScript确实很有趣,最终将字符串按字面意义添加为“未定义”。
试试看
let string1 = ''
答案 1 :(得分:0)
在treeDensityReport
的第一行中,您必须为string1
分配一个空字符串。
声明变量时,它是undefined
的默认值