'JS filter array all fields

How do I make this function search all fields in my array instead of a single variable at time?

const filteredData = tickets.filter(val => {
  if (inputText === '') {
    return val;
  } else {
    return val.ticket.ticketNumber.toLowerCase().includes(inputText);
    // return val.ticket.gallons.toLowerCase().includes(inputText);
  }
});

Ticket example (click to show)

[
  {
    index: "-N-ecIthFAo6EaEe7BVT",
    ticket: {
      appName: "biolime",
      driver: "Walt",
      endUser: "Verhoff Farms",
      field: "Marston-North 40",
      gallons: "1,237,887",
      lagoon: "CAMP-3",
      lagoonMaterial: "Lime Slurry",
      source: "Campbell's Soup",
      ticketDate: "04-04-2022",
      ticketNumber: "5825",
      ticketTime: "7:26:49.484 am",
      truck: "",
      zone: "Zone B",
    },
  },
  {
    index: "-N17TZscKkfW0TYE84WZ",
    ticket: {
      appName: "biolime",
      driver: "Walt",
      endUser: "Rob Howell",
      field: "testing",
      gallons: "9,999",
      lagoon: "CAMP-3",
      lagoonMaterial: "Lime Slurry",
      source: "Campbell's Soup",
      ticketDate: "04-13-2022",
      ticketNumber: "5826",
      ticketTime: "4:35:44.252 pm",
      truck: "10",
      zone: "",
    },
  },
];


Solution 1:[1]

You dont need to check inputText === '' everytime inside the filter callback.

const ticket = [{
    "appName": "biolime",
    "driver": "Walt",
    "endUser": "Verhoff Farms",
    "field": "Marston-North 40",
    "gallons": "1,237,887",
    "lagoon": "CAMP-3",
    "lagoonMaterial": "Lime Slurry",
    "source": "Campbell's Soup",
    "ticketDate": "04-04-2022",
    "ticketNumber": "5825",
    "ticketTime": "7:26:49.484 am",
    "truck": "",
    "zone": "Zone B"
  },
  {
    "appName": "biolime",
    "driver": "Walt",
    "endUser": "Rob Howell",
    "field": "testing",
    "gallons": "9,999",
    "lagoon": "CAMP-3",
    "lagoonMaterial": "Lime Slurry",
    "source": "Campbell's Soup",
    "ticketDate": "04-13-2022",
    "ticketNumber": "5826",
    "ticketTime": "4:35:44.252 pm",
    "truck": "10",
    "zone": ""
  }
]


function filteredData(e) {
  const filteredData = e.target.value && ticket.filter(val => {
    return val.ticketNumber.toLowerCase().includes(e.target.value);
  });
  console.log(filteredData)

};
<input type="text" onChange="filteredData(event)">

Solution 2:[2]

Maybe you should loop through tickets and return one, that has given inputText in field?

const filteredData = tickets.filter(ticket => {
  if (inputText === '') {
    return ticket;
  } else if (ticket.ticketNumber.toLowerCase().includes(inputText)) {
    return ticket;
  }
});

If I understand question correctly...

Solution 3:[3]

As suggested by @Barmar, loop over all the fields of an object with Object.values(obj) and test if any meet the condition with Array.prototype.some(). But like I said, you need to do it a bit differently since you have nested objects.

const tickets = [{
    index: "-N-ecIthFAo6EaEe7BVT",
    ticket: {
      appName: "biolime",
      driver: "Walt",
      endUser: "Verhoff Farms",
      field: "Marston-North 40",
      gallons: "1,237,887",
      lagoon: "CAMP-3",
      lagoonMaterial: "Lime Slurry",
      source: "Campbell's Soup",
      ticketDate: "04-04-2022",
      ticketNumber: "5825",
      ticketTime: "7:26:49.484 am",
      truck: "",
      zone: "Zone B",
    },
  },
  {
    index: "-N17TZscKkfW0TYE84WZ",
    ticket: {
      appName: "biolime",
      driver: "Walt",
      endUser: "Rob Howell",
      field: "testing",
      gallons: "9,999",
      lagoon: "CAMP-3",
      lagoonMaterial: "Lime Slurry",
      source: "Campbell's Soup",
      ticketDate: "04-13-2022",
      ticketNumber: "5826",
      ticketTime: "4:35:44.252 pm",
      truck: "10",
      zone: "",
    },
  },
];


const filterHelper = (ticket, inputText) => {
  if (inputText === '') {
    return true;
  } else {
    return Object.values(ticket).some((property) => {
      if (typeof property === 'string' || property instanceof String) {
        return property.toString().toLowerCase().includes(inputText);
      } else
        return filterHelper(property, inputText);
    });
  }
};
const filter = (tickets, inputText) => tickets.filter((ticket) => filterHelper(ticket, inputText));

//const filteredData = filter(tickets, "5825");

//console.log(filteredData);

const inputTextInput = document.querySelector("#inputText");
document.querySelector("#form").addEventListener("submit", (e) => {
  e.preventDefault();
  const inputText = inputTextInput.value;
  const filteredData = filter(tickets, inputText);
  console.log(filteredData);
});
<form id="form">
  <input id="inputText" placeholder="filter" />
  <button type="submit">filter</button>
</form>

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 brk
Solution 2 Alex Tom
Solution 3