0

I have JavaScript object array with the following structure:

const fruits =       [{
                        "id": "1",
                        "title": "Banana",
                        "description": "1 Minute"
                    },
                    {
                        "id": "2",
                        "title": "Apple",
                        "description": "2 - 3 Days"
                    },
                    {
                        "id": "3",
                        "title": "Manggo",
                        "description": "10 - 20 Days"
                    },
                    {
                        "id": "4",
                        "title": "Orange",
                        "description": "10 - 20 Days"
                    },
                    {
                        "id": "5",
                        "title": "Grape blue",
                        "description": "10 - 20 Days"
                    },
                    {
                        "id": "6",
                        "title": "Grape red",
                        "description": "10 - 20 Days"
                    }]

I want to extract object which has description = "10 - 20 Days" and title not contains "Grape"

Then my expected should be

                    {
                        "id": "3",
                        "title": "Manggo",
                        "description": "10 - 20 Days"
                    },
                    {
                        "id": "4",
                        "title": "Orange",
                        "description": "10 - 20 Days"
                    }
Rama
  • 39
  • 6
  • 1
    This what you are looking for ? https://stackoverflow.com/questions/2722159/how-to-filter-object-array-based-on-attributes – sheldor May 18 '21 at 16:15
  • 1
    Does this answer your question? [How to filter object array based on attributes?](https://stackoverflow.com/questions/2722159/how-to-filter-object-array-based-on-attributes) – Andy Ray May 18 '21 at 16:16
  • 2
    @Rama `fruits.filter(fruit => (fruit.description === "10 - 20 Days" && !fruit.title.includes('Grape')))` this will do the job – Akhil Aravind May 18 '21 at 16:17

2 Answers2

1

This is very simple to do by using Array.protoype.filter. Within the filter callback, you can use String.protoype.includes method to check if the title includes "grapes":

const fruits = [{
    "id": "1",
    "title": "Banana",
    "description": "1 Minute"
  },
  {
    "id": "2",
    "title": "Apple",
    "description": "2 - 3 Days"
  },
  {
    "id": "3",
    "title": "Manggo",
    "description": "10 - 20 Days"
  },
  {
    "id": "4",
    "title": "Orange",
    "description": "10 - 20 Days"
  },
  {
    "id": "5",
    "title": "Grape blue",
    "description": "10 - 20 Days"
  },
  {
    "id": "6",
    "title": "Grape red",
    "description": "10 - 20 Days"
  }
];

const filteredFruits = fruits.filter(fruit => {
  if (!fruit.title.toLowerCase().includes("grape")) {
    if (fruit.description === "10 - 20 Days") {
      return true;
    }
  }

  return false;
});

console.dir(filteredFruits)
Tom O.
  • 5,730
  • 2
  • 21
  • 35
0

you should use filter like this

const fruits =       [{
                        "id": "1",
                        "title": "Banana",
                        "description": "1 Minute"
                    },
                    {
                        "id": "2",
                        "title": "Apple",
                        "description": "2 - 3 Days"
                    },
                    {
                        "id": "3",
                        "title": "Manggo",
                        "description": "10 - 20 Days"
                    },
                    {
                        "id": "4",
                        "title": "Orange",
                        "description": "10 - 20 Days"
                    },
                    {
                        "id": "5",
                        "title": "Grape blue",
                        "description": "10 - 20 Days"
                    },
                    {
                        "id": "6",
                        "title": "Grape red",
                        "description": "10 - 20 Days"
                    }]

const res = fruits.filter(val=> !val.title.includes('Grape') && val.description.includes('10 - 20 Days'))

console.log(res)
Saleh Majeed
  • 19
  • 1
  • 4