Search code examples
javascriptarraysecmascript-5

Filter an array of object using filter array


I'm trying to filter an array using 2 criteria : one is straigthforward (==1) and the other is an array. In the below example, i would want to filter : level = 0 or name comprises in ['B','S']

[
{id: 1, level: 0, name: 'A'},
{id: 2, level: 1, name: 'B'},
{id: 3, level: 1, name: 'S'},
{id: 4, level: 0, name: 'A'},
{id: 5, level: 0, name: 'S'},
{id: 6, level: 1, name: 'A'},
{id: 7, level: 0, name: 'B'}, ]

so the result would be :

[
{id: 1, level: 0, name: 'A'},
{id: 2, level: 1, name: 'B'},
{id: 3, level: 1, name: 'S'},
{id: 4, level: 0, name: 'A'},
{id: 5, level: 0, name: 'S'},
{id: 7, level: 0, name: 'B'}, ]

As i'm limited with ecmaScript-5 i cannot use .includes that would have helped here.

Also, i would like to stick to .filter function.

Any idea how to achieve this ?

thanks


Solution

  • Using ecmaScript-5 you can do:

    var arr = [{ id: 1, level: 0, name: 'A' },{ id: 2, level: 1, name: 'B' },{ id: 3, level: 1, name: 'S' },{ id: 4, level: 0, name: 'A' },{ id: 5, level: 0, name: 'S' },{ id: 6, level: 1, name: 'A' },{ id: 7, level: 0, name: 'B' },]
    
    var result = arr.filter(function (obj) {
      return obj.level === 1 || ['B', 'S'].indexOf(obj.name) > -1;
    })
    
    
    console.log(result)