1

Suppose I have an array of objects that have

name: id: school: address:

I know how to filter by one category, such as

data.filter(data => data[name].includes("Lake"))

to get all the objects whose name includes the word Lake.

But is there a way to filter the data to get all object where any of the fields includes the word?

data.filter(data => data.includes("Lake"))

doesn't work, I already tried.

Thank you!

Amila Senadheera
  • 12,229
  • 15
  • 27
  • 43
Lucy Gu
  • 369
  • 1
  • 3
  • 10

2 Answers2

1
const arr = [
  { id: 1, name: "name_1", school: "school_1", address: "address_1" },
  { id: 2, name: "lake", school: "school_2", address: "address_2" },
  { id: 3, name: "name_3", school: "lake", address: "address_3" },
  { id: 4, name: "name_4", school: "school_4", address: "lake" }
];

const anyKeyFilter = item => obj => Object.values(obj).includes(item);

const filteredArr = arr.filter(anyKeyFilter("lake"));

console.log(filteredArr);

You may use trim() and .toLowerCase() if you need it.

maxpsz
  • 431
  • 3
  • 9
1

const arr = [
  { id: 1, name: "name_1", school: "school_1", address: "address_1" },
  { id: 2, name: "lake", school: "school_2", address: "address_2" },
  { id: 3, name: "name_3", school: "lake", address: "address_3" },
  { id: 4, name: "name_4", school: "school_4", address: "lake" }
];


const filteredArr = arr?.filter((data) => Object.values(data)?.includes('lake'));

console.log(filteredArr);
Sanket Shah
  • 2,888
  • 1
  • 11
  • 22