我有一个函数,它接受各种过滤器值(每个过滤器的值存储在一个数组中)并将它们集中存储在一个对象中。我的想法是,通过这样做我应该能够堆叠值 - 即如果我有一个过滤器的值,然后选择第二个过滤器,这不应该消除第一个过滤器值,只要我&# 39; m返回完整的对象 - 这就是我正在做的事情。但是,出于某种原因,发生的事情是选择新的过滤器会清除先前选择的过滤器的值。这是我的代码:
public filterByTypes(value, type) {
let location = '', agency = '', zipcode = '', firstName = '', lastName = '', state = '';
if (value && type && type === 'location')
{
location = value;
}
if (value && type && type === 'agency')
{
agency = value;
}
else if (value && type && type === 'zip')
{
zipcode = value;
}
else if (value && type && type === 'firstName')
{
firstName = value;
}
else if (value && type && type === 'lastName')
{
lastName = value;
}
else if (value && type && type === 'state')
{
state = value;
}
return { location, agency, zipcode, firstName, lastName, state };
}
正如我所说,由于我用每个值参数返回一个对象,在我看来这应该返回所有堆叠值,而不仅仅是最近选择的值。然而,这是发生了什么 - 当选择新的过滤器时,它会清除前一个/不同过滤器的值。我在这里缺少什么?
答案 0 :(得分:3)
每次运行该功能时都要重置所有键。试着改为:
var filters = {};
function setFilter(type, value) {
if(value && type) { filters[type] = value; }
return filters;
}
如果你正在管理一个对象,'过滤器'可以是一个属性,'setFilter'可以是一个方法。
答案 1 :(得分:0)
您还需要在函数中传递返回的对象
function processByTypes(value, type, filters) {
if (value && type && type === 'location')
{
filters.location = value;
}
if (value && type && type === 'department')
{
filters.department = value;
}
else if (value && type && type === 'zip')
{
filters.zipcode = value;
}
else if (value && type && type === 'firstName')
{
filters.firstName = value;
}
else if (value && type && type === 'lastName')
{
filters.lastName = value;
}
else if (value && type && type === 'branch')
{
filters.branch = value;
}
else if (value && type && type === 'active')
{
filters.active = value;
}
return filters;
}
let filters = {};
processByTypes('Sales', 'department', filters);
processByTypes('Americas', 'location', filters);
//and so on