上下文
class Park extends Place {
constructor(name, build_year, number_trees, area, tree_density){
super(name, build_year);
this.number_tress = number_trees;
this.area = area;
this.tree_density = number_trees/area;
} `
`const park1 = new Park("Jadim botanico", 1958, 30, 30);
const park2 = new Park("Tangua", 1990, 60, 15);
const park3 = new Park("Bosque do Papa", 1996, 10000, 300);
arr_park = [park1, park2, park3];`
目标
检索所有树木超过1000的公园。
解决方案
var bushyPark = arr_park.map(cur => {if(cur.number_tress>1000){return cur.name}}).filter(cur => cur);
问题
是否可以使用不带过滤器的三元运算符做同样的事情?
var bushyPark = arr_park.map(cur => (cur.number_tress > 1000) ? cur : ??
答案 0 :(得分:4)
您可以直接使用.filter
,而无需使用.map
方法,在这种情况下是不必要的:
const bushyPark = arr_park.filter(cur => cur.number_tress>1000);
console.log('new array: ', bushyPark);
.map
:此方法用于操纵/更改数组中每个项目的内容。
.filter
:此方法用于仅返回满足布尔条件的数组项。
以下是.filter
方法的定义,以便更好地理解:
filter()方法创建一个数组,其中填充了所有通过测试的数组元素(作为函数提供)。注意:filter()不会对没有值的数组元素执行该函数。注意:filter()不会更改原始数组。
仅使用.map
的另一种解决方案:
let newNamesArray = [];
arr_park.map(cur => {
if(cur.number_tress>1000){
newNamesArray.push(cur.name);
}
return cur;
})
console.log('newNamesArray: ', newNamesArray);
答案 1 :(得分:1)
如果要添加名称之类的条件,可以使用Array.reduce
arr_park.reduce((acc, ele)=> {
if(ele.number_tress>1000){
acc.push(ele.name)
}
return acc
}
,[])