Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

undefined is not a function .filter function

I’m trying to make a search input setting the state "search" in the onChangeText

 <TextInput
          label="Pesquisar"
          theme={{
            colors: {
              primary: "white",
              text: "white",
              placeholder: "white",
              underlineColor: "transparent",
            },
          }}
          value={search}
          onChangeText={setSearch}
         /> 

so I’m getting an array of objects from axios and then i set it into another state

const [cars, setCars] = useState([])

In the console.log i did i got these values:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

data Array [
  Object {
    "__v": 0,
    "_id": "6316364fdd41d96a9df444",
    "image": "https://i.ibb.co/C51M22C/8bcc6f8cb09bba25780f2506c85c9635.jpg",,
    "model": "240",
    "name": "Car 1",
    "price": 99999999,
  },
  Object {
    "__v": 0,
    "_id": "6316364fdd41d96a9dff54cb",
    "image": "https://i.ibb.co/C51M22C/8bcc6f8cb09bba25780f2506c85c9635.jpg",,
    "model": "200",
    "name": "Car 2",
    "price": 99999999,
   }
]

But when I try to use a filter function and then a .map into this function to show the array of cars, it gives this error:
"undefined is not a function (near '...filteredCars.map')"

the filteredCar function:

const filteredCars = () => {
    cars.filter((item) => {
      return item.name.toLowerCase().includes(search.toLowerCase());
    });
  };

here is where i call the filter function inside a .map

const carsItems = filteredCar.map((item) => {
    return (
      <View key={item._id}>
        <View style={{ padding: 10 }}>
          <TouchableOpacity key={item} activeOpacity={0.8}>
            <Card
              style={{
                marginLeft: 15,
                marginRight: 15,
                marginTop: 0,
                borderRadius: 10,
              }}
              onPress={() => {
                navigation.push("Details", {
                  id: item._id,
                  name: item.name,
                });
              }}
            >
              <Card.Cover
                source={{ uri: item.imagem_principal }}
                style={{ margin: 5, borderRadius: 10 }}
              />
              <Card.Content>
                <Title>{item.name}</Title>
                <Paragraph>{item.model}</Paragraph>
              </Card.Content>
            </Card>
          </TouchableOpacity>
        </View>
        <Divider />
      </View>
    );
  });```
Does anyone know why i'm getting this error?

>Solution :

out of the comments i get it now what your issue is. you’re using filteredCars as a function and then want to iterate over it with map. remove the function body around the whole thing.

you where asigning a function to your const filteredCars instead of the array from cars.filter result.

this:

const filteredCars = () => {
    return cars.filter(...filterFunction)
}

is assigning a function to your const. as such you had to call it first to get an array of your filtered cars.

const cars_filtered = filteredCars();

and then you could’ve map over cars_filtered.

use:

const filteredCars = cars.filter((item) => {
    return item.name.toLowerCase().includes(search.toLowerCase());
});

instead.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading