Reputation: 1
Need to get an array of houses that match these parameters
const houses = [
{id: 1, name: 'house1', floors: 2, balconies: 1, terrace: 'Y', veranda: 'N'},
{id: 2, name: 'house2', floors: 1, balconies: "N", terrace: 'N', veranda: 'Y'},
{id: 3, name: 'house3', floors: 3, balconies: 1, terrace: 'Y', veranda: 'N'},
{id: 4, name: 'house4', floors: 1, balconies: "N", terrace: 'N', veranda: 'Y'},
{id: 5, name: 'house5', floors: 1, balconies: "N", terrace: 'Y', veranda: 'N'},
{id: 6, name: 'house6', floors: 3, balconies: 2, terrace: 'N', veranda: 'N'},
{id: 7, name: 'house7', floors: 1, balconies: "N", terrace: 'Y', veranda: 'Y'},
{id: 8, name: 'house8', floors: 2, balconies: 1, terrace: 'N', veranda: 'Y'},
]
const parameters = {floors: 1, terrace: 'Y', veranda: 'Y'}
const filterArray = houses.filter(house => {
// Code
})
I tried it like this Object.entries(parameters).some(e => e == house[e])
I'm already confused. I tried using includes
. Also nothing
I apologize for my English
Upvotes: 0
Views: 88
Reputation: 1185
const houses = [
{id: 1, name: 'house1', floors: 2, balconies: 1, terrace: 'Y', veranda: 'N'},
{id: 2, name: 'house2', floors: 1, balconies: "N", terrace: 'N', veranda: 'Y'},
{id: 3, name: 'house3', floors: 3, balconies: 1, terrace: 'Y', veranda: 'N'},
{id: 4, name: 'house4', floors: 1, balconies: "N", terrace: 'N', veranda: 'Y'},
{id: 5, name: 'house5', floors: 1, balconies: "N", terrace: 'Y', veranda: 'N'},
{id: 6, name: 'house6', floors: 3, balconies: 2, terrace: 'N', veranda: 'N'},
{id: 7, name: 'house7', floors: 1, balconies: "N", terrace: 'Y', veranda: 'Y'},
{id: 8, name: 'house8', floors: 2, balconies: 1, terrace: 'N', veranda: 'Y'},
]
const parameters = {floors: 1, terrace: 'Y', veranda: 'Y'};
const filtered = houses.filter((house) => {
return house.floors === parameters.floors && house.terrace === parameters.terrace && house.veranda === parameters.veranda;
});
console.log(filtered);
Upvotes: -1
Reputation: 6390
You can use a for...in
loop inside a filter()
and filter the array. Try this-
const houses = [
{id: 1, name: 'house1', floors: 2, balconies: 1, terrace: 'Y', veranda: 'N'},
{id: 2, name: 'house2', floors: 1, balconies: "N", terrace: 'N', veranda: 'Y'},
{id: 3, name: 'house3', floors: 3, balconies: 1, terrace: 'Y', veranda: 'N'},
{id: 4, name: 'house4', floors: 1, balconies: "N", terrace: 'N', veranda: 'Y'},
{id: 5, name: 'house5', floors: 1, balconies: "N", terrace: 'Y', veranda: 'N'},
{id: 6, name: 'house6', floors: 3, balconies: 2, terrace: 'N', veranda: 'N'},
{id: 7, name: 'house7', floors: 1, balconies: "N", terrace: 'Y', veranda: 'Y'},
{id: 8, name: 'house8', floors: 2, balconies: 1, terrace: 'N', veranda: 'Y'},
]
const parameters = {floors: 1, terrace: 'Y', veranda: 'Y'};
const filtered = houses.filter(house => {
let retrunValue = true;
for (const key in parameters) {
retrunValue &&= house[key] === parameters[key];
}
return retrunValue;
});
console.log(filtered);
.as-console-wrapper{min-height: 100%!important; top: 0}
Upvotes: 0
Reputation: 16676
But if some parameters require extra rules, for example, the specified number of floors may be exceeded, you may want to code the rules explicitly:
const filterArray = houses.filter (house => {
if (house.floors < parameters.floors) return false; // too few floors
if (parameters.terrace === "Y" && house.terrace === "N") return false; // missing terrace
if (parameters.veranda === "Y" && house.veranda === "N") return false; // missing veranda
// Something analogous for parameters.balconies
return true; // Everything is OK
})
Upvotes: -1
Reputation: 171679
One fairly easy way is use Object.entries()
to turn your parameters object into an array so you can use paramsArray.every()
in your filter()
.
This doesn't require you to know any of the specific properties in the parameters object or even how many there are, the only criteria is that they all have a matching value in the filtered objects
const houses = [
{id: 1, name: 'house1', floors: 2, balconies: 1, terrace: 'Y', veranda: 'N'},
{id: 2, name: 'house2', floors: 1, balconies: "N", terrace: 'N', veranda: 'Y'},
{id: 3, name: 'house3', floors: 3, balconies: 1, terrace: 'Y', veranda: 'N'},
{id: 4, name: 'house4', floors: 1, balconies: "N", terrace: 'N', veranda: 'Y'},
{id: 5, name: 'house5', floors: 1, balconies: "N", terrace: 'Y', veranda: 'N'},
{id: 6, name: 'house6', floors: 3, balconies: 2, terrace: 'N', veranda: 'N'},
{id: 7, name: 'house7', floors: 1, balconies: "N", terrace: 'Y', veranda: 'Y'},
{id: 8, name: 'house8', floors: 2, balconies: 1, terrace: 'N', veranda: 'Y'},
]
const parameters = {floors: 1, terrace: 'Y', veranda: 'Y'};
const paramsArray = Object.entries(parameters)
const filterArray = houses.filter(house => paramsArray.every(([k,v])=> house[k] === v));
console.log(filterArray)
Upvotes: 5