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

1

2 Answers 2

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; }

Sign up to request clarification or add additional context in comments.

4 Comments

I have an error trying that : undefined is not an object (evaluating 'obj.culture.find')... any idea ?
Seems like you got undefined instead of an object. I can't really know without a minimal reproducible example
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 :-)
You should include in your question the code you are using
0

To filter array with specific key,

var filterArray = detailArray.filter(
      data => data.service === serviceIdentifier,
    );

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.