堆叠JavaScript对象中的过滤器值不起作用

时间:2018-04-09 18:58:18

标签: javascript object

我有一个函数,它接受各种过滤器值(每个过滤器的值存储在一个数组中)并将它们集中存储在一个对象中。我的想法是,通过这样做我应该能够堆叠值 - 即如果我有一个过滤器的值,然后选择第二个过滤器,这不应该消除第一个过滤器值,只要我&# 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 };
}

正如我所说,由于我用每个值参数返回一个对象,在我看来这应该返回所有堆叠值,而不仅仅是最近选择的值。然而,这是发生了什么 - 当选择新的过滤器时,它会清除前一个/不同过滤器的值。我在这里缺少什么?

2 个答案:

答案 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