使用基于另一个数组的对象动态过滤数组
Filter Array with objects based on another array dynamically
使用基于另一个数组的对象动态过滤数组。
我需要使用另一个数组来过滤主数组。但是过滤器数组只会包含几个或几个字段。
var codes = [{
"title": "lore",
"city": "New York",
"desc": "lorem lorem",
"age": "32"
},
{
"title": "lore2 ",
"city": "Santa Monica",
"desc": "lorem2",
"age": "20"
}
];
let filter = [{
"city": "New York"
}, {
"age": "20"
},
...或更多过滤器。此过滤器由单击复选框的人动态创建。
]
也许这样的东西对你有用?
基本上循环遍历过滤器,然后还遍历单独的过滤器对象键值对并根据代码检查它们。
var codes = [{
"title": "lore",
"city": "New York",
"desc": "lorem lorem",
"age": "32"
},
{
"title": "lore2 ",
"city": "Santa Monica",
"desc": "lorem2",
"age": "20"
}];
var filters = [{"city": "New York"}, {"age": "32"}];
function filterByMultipleFilters(data, filters) {
return data.filter(item => {
// Loop through all filters and check the current item
for (const filter of filters) {
for (const [key, value] of Object.entries(filter)) {
if (!item[key] || item[key] !== value)
return false;
}
}
return true;
});
}
console.clear();
let result = filterByMultipleFilters(codes, filters);
console.log(result);
这应该有效
let codes = [{
"title": "lore",
"city": "New York",
"desc": "lorem lorem",
"age": "20"
},
{
"title": "lore2 ",
"city": "Santa Monica",
"desc": "lorem2",
"age": "20"
}
];
let filter = [{
"city": "New York"
}, {
"age": "20"
}];
let res = codes.filter(code => {
return filter.every(f => {
const [key, value] = Object.entries(f)[0];
return code[key] == value
});
});
console.log(res)
试试下面的代码示例,我想你想要什么;
尝试直接获取过滤器 object 而不是另一个数组;
可变代码 = [{
"title": "传说",
“城市”:“纽约”,
"desc": "lorem lorem",
“年龄”:“32”
},
{
“标题”:“传说2”,
“城市”:“圣莫尼卡”,
“desc”:“lorem2”,
“年龄”:“20”
}
];
let filters = [{
"city": "Santa Monica"
}, {
"age": "20"
}];
const filterCode = {};
filters.forEach(filter => {
for (var key of Object.keys(filter))
filterCode[key] = filter[key];
});
var filteredCodes = codes.filter(code => {
for (var key of Object.keys(filterCode)) {
if(code[key] !== filterCode[key])
return false;
}
return true;
});
console.log(过滤代码);
您可以采用更易于使用的更好数据结构,而不是未知键。
结果你得到所有 keys/values 匹配的对象。
const
codes = [{ title: "lore", city: "New York", desc: "lorem lorem", age: "32" }, { title: "lore2 ", city: "New York", desc: "lorem2", age: "20" }],
filter = [{ key: "city", value: "New York" }, { key: "age", value: "20" }],
result = codes.filter(o => filter.every(({ key, value }) => o[key] === value));
console.log(result);
使用基于另一个数组的对象动态过滤数组。
我需要使用另一个数组来过滤主数组。但是过滤器数组只会包含几个或几个字段。
var codes = [{
"title": "lore",
"city": "New York",
"desc": "lorem lorem",
"age": "32"
},
{
"title": "lore2 ",
"city": "Santa Monica",
"desc": "lorem2",
"age": "20"
}
];
let filter = [{
"city": "New York"
}, {
"age": "20"
},
...或更多过滤器。此过滤器由单击复选框的人动态创建。
]
也许这样的东西对你有用?
基本上循环遍历过滤器,然后还遍历单独的过滤器对象键值对并根据代码检查它们。
var codes = [{
"title": "lore",
"city": "New York",
"desc": "lorem lorem",
"age": "32"
},
{
"title": "lore2 ",
"city": "Santa Monica",
"desc": "lorem2",
"age": "20"
}];
var filters = [{"city": "New York"}, {"age": "32"}];
function filterByMultipleFilters(data, filters) {
return data.filter(item => {
// Loop through all filters and check the current item
for (const filter of filters) {
for (const [key, value] of Object.entries(filter)) {
if (!item[key] || item[key] !== value)
return false;
}
}
return true;
});
}
console.clear();
let result = filterByMultipleFilters(codes, filters);
console.log(result);
这应该有效
let codes = [{
"title": "lore",
"city": "New York",
"desc": "lorem lorem",
"age": "20"
},
{
"title": "lore2 ",
"city": "Santa Monica",
"desc": "lorem2",
"age": "20"
}
];
let filter = [{
"city": "New York"
}, {
"age": "20"
}];
let res = codes.filter(code => {
return filter.every(f => {
const [key, value] = Object.entries(f)[0];
return code[key] == value
});
});
console.log(res)
试试下面的代码示例,我想你想要什么;
尝试直接获取过滤器 object 而不是另一个数组;
可变代码 = [{ "title": "传说", “城市”:“纽约”, "desc": "lorem lorem", “年龄”:“32” }, { “标题”:“传说2”, “城市”:“圣莫尼卡”, “desc”:“lorem2”, “年龄”:“20” } ];
let filters = [{
"city": "Santa Monica"
}, {
"age": "20"
}];
const filterCode = {};
filters.forEach(filter => {
for (var key of Object.keys(filter))
filterCode[key] = filter[key];
});
var filteredCodes = codes.filter(code => {
for (var key of Object.keys(filterCode)) {
if(code[key] !== filterCode[key])
return false;
}
return true;
});
console.log(过滤代码);
您可以采用更易于使用的更好数据结构,而不是未知键。
结果你得到所有 keys/values 匹配的对象。
const
codes = [{ title: "lore", city: "New York", desc: "lorem lorem", age: "32" }, { title: "lore2 ", city: "New York", desc: "lorem2", age: "20" }],
filter = [{ key: "city", value: "New York" }, { key: "age", value: "20" }],
result = codes.filter(o => filter.every(({ key, value }) => o[key] === value));
console.log(result);