I have a JavaScript Object (filters), which has boolean values. I also have an array of objects (mainSubArray). Based on the JavaScript Object, I want to return a new array (filteredArray) if the boolean values are true and not return a new array if the boolean value is false.
So far, I've tried the following:
// The main array that needs to be filtered
const mainSubArray = [{
MenB_Classification: "NOT Required",
CONTROL: "Public",
Enrollment: "892"
},
{
MenB_Classification: "Required",
CONTROL: "Private",
Enrollment: "1601"
},
{
MenB_Classification: "NOT Required",
CONTROL: "Private",
Enrollment: "447"
},
{
MenB_Classification: "NOT Required",
CONTROL: "Public",
Enrollment: "1203"
},
{
MenB_Classification: "Required",
CONTROL: "Private",
Enrollment: "32"
},
{
MenB_Classification: "NOT Required",
CONTROL: "Public",
Enrollment: "98"
},
{
MenB_Classification: "Recommended",
CONTROL: "Private",
Enrollment: "654"
},
{
MenB_Classification: "NOT Required",
CONTROL: "Private",
Enrollment: "345318"
},
{
MenB_Classification: "NOT Required",
CONTROL: "Private",
Enrollment: "13324"
},
{
MenB_Classification: "Recommended",
CONTROL: "Private",
Enrollment: "39"
},
{
MenB_Classification: "NOT Required",
CONTROL: "Private",
Enrollment: "4"
},
{
MenB_Classification: "NOT Required",
CONTROL: "Private",
Enrollment: "910"
},
{
MenB_Classification: "NOT Required",
CONTROL: "Private",
Enrollment: "23453"
}
]
// Object with boolean values
var filters = {
required: true,
recomended: true,
notRequired: false,
publics: true,
privates: true,
ennrollmentOne: true,
ennrollmentTwo: false,
ennrollmentThree: false,
ennrollmentFour: false,
}
// New Array using array.filter() method
var filteredArray = mainSubArray.filter(function(d) {
if ((filters.required == true && d.MenB_Classification === 'Required') || (filters.recomended === true && d.MenB_Classification === 'Recommended') || (filters.notRequired === true && d.MenB_Classification === 'NOT Required') || (filters.publics === true && d.CONTROL === 'Public') || (filters.privates === true && d.CONTROL === 'Private') || (filters.ennrollmentOne === true && d.Enrollment < 100) || (filters.ennrollmentTwo === true && d.Enrollment >= 100 && d.Enrollment < 1000) || (filters.ennrollmentThree === true && d.Enrollment >= 1000 && d.Enrollment < 5000) || (filters.ennrollmentThree === true && d.Enrollment > 5000)) {
return true;
} else {
return false;
}
});
console.log(filteredArray);
When I console.log(filteredArray) , I get back the original array.
The output should be a new array that has only the values that are set to true in the filters object.
filtersdoing? why it does not have vlaues who are directly comparable with the object's values?someBoolean &&instead ofsomeBoolean === true &&.