插入满足条件的数组元素

时间:2020-03-20 18:35:11

标签: javascript

上下文

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 : ??

2 个答案:

答案 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
    }
    ,[])