4

I'm stuck on something I think it is just stupid but after trying some stuffs, I can't find the solution. Any advice ?

I have an array with objects in this format :

   [
    Object {
      "name": "name",
     "description": "100 jours ferme",
     "image: "path_image",
     "culture": Array [
      Object {
        "name": "name",
        "value": "309",
      }
    ]}
    ...
    ]

With a function in my react native project I get a selected value, for instance : 309

So what i'm trying to do is to create a New Array with only the items containing this value in my Object inside culture and modifying the state of my array (with setState)

I know I can map all the culture array with .map() but then I'm stuck. I just want to say "I want a new array with these elements" ...

Then, I know if I had something like that :

"culture": 309

I could have done that : myArray.filter(i => i.culture == selectedValue)

Any help on how I can do that with .filter(), .map() ?

Thank you

Clément CREUSAT
  • 301
  • 3
  • 6
  • 13
  • Possible duplicate of [Javascript: How to filter object array based on attributes?](https://stackoverflow.com/questions/2722159/javascript-how-to-filter-object-array-based-on-attributes) – Heretic Monkey Sep 29 '18 at 17:38

2 Answers2

4

You can Array.prototype.filter over the array, then for each culture run Array.prototype.find with the predicate of

o => o.value === selectedValue

Here is a running example:

const arr = [
  {
    name: "name",
    description: "100 jours ferme",
    image: "path_image",
    culture: [{
      name: "name",
      value: "309"
    }]
  },
  {
    name: "name",
    description: "100 jours ferme",
    image: "path_image",
    culture: [{
      name: "name",
      value: "308"
    }]
 }
];

const selectedValue = '309';
const newArr = arr.filter(obj => obj.culture.find(o => o.value === selectedValue));
console.log(newArr)
.as-console-wrapper { max-height: 100% !important; }
Sagiv b.g
  • 30,379
  • 9
  • 68
  • 99
  • I have an error trying that : `undefined is not an object (evaluating 'obj.culture.find')`... any idea ? – Clément CREUSAT Sep 30 '18 at 14:44
  • Seems like you got undefined instead of an object. I can't really know without a [mcve] – Sagiv b.g Sep 30 '18 at 15:09
  • your example is working right. and if I copy in a static way the data I receive through an `API`, it's working too ... but I just try to filter/find what I get with the `API` and I have in my state. It is not. For info, I'm passing my data through the params of `React Navigation` (the static data works, the one from the API no.) Then to let you know that I receive an object in this format : {{info},{info}} and I transform it like this : Object.values(response.data) Maybe there are some clues :-) – Clément CREUSAT Sep 30 '18 at 16:04
  • You should include in your question the code you are using – Sagiv b.g Sep 30 '18 at 16:08
0

To filter array with specific key,

var filterArray = detailArray.filter(
      data => data.service === serviceIdentifier,
    );
parth
  • 853
  • 11
  • 18