dygus__wlb
dygus__wlb

Reputation: 77

.Filter() remove array or arrays when undefined

I got object:

[
  {
    "name": "Test",
    "settings": {
      "object": {
        "hoursAvailable": [
          11,
          9,
          14
        ],
        "value": 65
      }
    }
  },
  {
    "name": "Test 2",
    "settings": {
      "object": {
        "hoursAvailable": [],
        "value": 65
      }
    }
  },
  {
    "name": "Test 3",
    "settings": {
      "object": {
        "value": 65
      }
    }
  }
]

I'm figuring out how can i remove all hourAvailable < 10, using .filter or lodash. The problem sometimes i have undefined "hoursAvailable" objects. After filtering i need to have:

[
 {
   // other data
   "settings": {
     "object": {
       "hoursAvailable": [
         9, // <- all numbers <10
       ],
       "value": 65
     }
   }
 },
 {
   // other data
   "settings": {
     "object": {
       "hoursAvailable": [],
       "value": 65
     }
   }
 },
 {
   // other data
   "settings": {
     "object": {
       "value": 65
     }
   }
 }
]

I'm trying to:

.filter(arr => {
arr['settings']['object']['hoursAvailable'] <= 10;
}

But it gives me undefined when there's no hoursAvailable object and didnt delete numbers <10 What should i do to delete <10 in ['hoursAvailable']?

Upvotes: 1

Views: 47

Answers (1)

Harsh
Harsh

Reputation: 1695

You can achieve this by modifying the condition of your filter block.

I have made a JSfiddle for the representation. You can play around with conditions in the filter block to achieve the desired result.

https://jsfiddle.net/harsh89/bru7jyg6/7/

var xyz = arr.filter(val => {
return !val.settings.object.hoursAvailable || 

!val.settings.object.hoursAvailable.length  || 

(val.settings.object.hoursAvailable[0] < 10);
});

Upvotes: 1

Related Questions