How to use ES6 Fat Arrow to .filter() an array of objects

后端 未结 5 757
感情败类
感情败类 2020-12-04 06:07

I\'m trying to use ES6 arrow function with .filter to return adults (Jack & Jill). It appears I cannot use an if statement.

What do I need to know

相关标签:
5条回答
  • 2020-12-04 06:30

    As simple as you can use const adults = family.filter(({ age }) => age > 18 );

    const family =[{"name":"Jack",  "age": 26},
                  {"name":"Jill",  "age": 22},
                  {"name":"James", "age": 5 },
                  {"name":"Jenny", "age": 2 }];
    
    const adults = family.filter(({ age }) => age > 18 );
    
    console.log(adults)

    0 讨论(0)
  • 2020-12-04 06:39

    You can't implicitly return with an if, you would need the braces:

    let adults = family.filter(person => { if (person.age > 18) return person} );
    

    It can be simplified though:

    let adults = family.filter(person => person.age > 18);
    
    0 讨论(0)
  • 2020-12-04 06:46

    Here is my solution for those who use hook; If you are listing items in your grid and want to remove the selected item, you can use this solution.

    var list = data.filter(form => form.id !== selectedRowDataId);
    setData(list);
    
    0 讨论(0)
  • 2020-12-04 06:46

    return arrayname.filter((rec) => rec.age >18) write this one in method and call the method

    0 讨论(0)
  • 2020-12-04 06:50

    It appears I cannot use an if statement.

    Arrow functions either allow to use an expression or a block as their body. Passing an expression

    foo => bar
    

    is equivalent to the following block

    foo => { return bar; }
    

    However,

    if (person.age > 18) person
    

    is not an expression, if is a statement. Hence you would have to use a block, if you wanted to use if in an arrow function:

    foo => {  if (person.age > 18) return person; }
    

    While that technically solves the problem, this a confusing use of .filter, because it suggests that you have to return the value that should be contained in the output array. However, the callback passed to .filter should return a Boolean, i.e. true or false, indicating whether the element should be included in the new array or not.

    So all you need is

    family.filter(person => person.age > 18);
    

    In ES5:

    family.filter(function (person) {
      return person.age > 18;
    });
    
    0 讨论(0)
提交回复
热议问题