【发布时间】:2019-10-08 15:18:54
【问题描述】:
我有一个 JavaScript 对象 (filters),它具有布尔值。我还有一组对象 (mainSubArray)。基于 JavaScript Object,如果布尔值为 true,我想返回一个新数组 (filteredArray),如果布尔值为 false,则不返回新数组。
到目前为止,我已经尝试了以下方法:
// 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);
当我 console.log(filteredArray) 时,我会取回原始数组。
输出应该是一个新数组,其中仅包含 filters 对象中设置为 true 的值。
【问题讨论】:
-
我试过你的代码,它看起来原始数组 mainSubArray 有 13 项,过滤数组过滤数组里面有 12 项,区别是 {MenB_Classification: "NOT Required", CONTROL: "33033764030", Enrollment: "345318 "}
-
filters在做什么?为什么它没有与对象的值直接可比较的值? -
您希望过滤后的数组是什么样的?现在我认为问题出在你的逻辑上,因为你使用了 9 或 10 个不同的 or 语句,它几乎总是匹配其中一个。我还建议写
someBoolean &&而不是someBoolean === true &&。 -
过滤器函数中的 if 条件涵盖了所有内容,这就是为什么您将原始数组视为过滤器的结果
-
所以,如果 ANY 的过滤器为真,则包含该项目!?还是应该只包含所有过滤器都适用的项目?
标签: javascript arrays javascript-objects