Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 多个过滤器的参数_Javascript_Angular - Fatal编程技术网

Javascript 多个过滤器的参数

Javascript 多个过滤器的参数,javascript,angular,Javascript,Angular,我在尝试将参数设置为URL以筛选表时遇到问题 我创建了一个可重用的方法来处理这个问题,但当我有多个对象用于设置参数时,我遇到了问题。。。下面是一个例子 我的情妇看起来像这样 defaultParams = { page: '0', pageSize: '5', sortBy: 'username', sortByType: 'ASC', search: null, filter: { enabled: null, activ

我在尝试将参数设置为URL以筛选表时遇到问题

我创建了一个可重用的方法来处理这个问题,但当我有多个对象用于设置参数时,我遇到了问题。。。下面是一个例子

我的情妇看起来像这样

defaultParams = {
    page: '0',
    pageSize: '5',
    sortBy: 'username',
    sortByType: 'ASC',
    search: null,
    filter: {
      enabled: null,
      activated: null,
      student: {   --> this obj
        id: 1
      },
      role: {    --> this ob
        role: 'ADMIN'
      }
    }
  };
?page=0&pageSize=5&sortBy=username&sortByType=ASC&filter=student.id:1,role.role:ADMIN
?page=0&pageSize=5&sortBy=username&sortByType=ASC&filter=student.id:1,student.role.role:ADMIN
问题是当我在filter obj中有多个对象时,你们可以看到

我的URL需要如下所示

defaultParams = {
    page: '0',
    pageSize: '5',
    sortBy: 'username',
    sortByType: 'ASC',
    search: null,
    filter: {
      enabled: null,
      activated: null,
      student: {   --> this obj
        id: 1
      },
      role: {    --> this ob
        role: 'ADMIN'
      }
    }
  };
?page=0&pageSize=5&sortBy=username&sortByType=ASC&filter=student.id:1,role.role:ADMIN
?page=0&pageSize=5&sortBy=username&sortByType=ASC&filter=student.id:1,student.role.role:ADMIN
但我是这样的

defaultParams = {
    page: '0',
    pageSize: '5',
    sortBy: 'username',
    sortByType: 'ASC',
    search: null,
    filter: {
      enabled: null,
      activated: null,
      student: {   --> this obj
        id: 1
      },
      role: {    --> this ob
        role: 'ADMIN'
      }
    }
  };
?page=0&pageSize=5&sortBy=username&sortByType=ASC&filter=student.id:1,role.role:ADMIN
?page=0&pageSize=5&sortBy=username&sortByType=ASC&filter=student.id:1,student.role.role:ADMIN
我来这里也是为了角色学生-->
STUDENT.role.role:ADMIN
而不是
role.role:ADMIN

这里是,在控制台中您可以看到问题

如何处理

Thnx

StackSnippet
const params=defaultParams={
页面:“0”,
页面大小:“5”,
排序方式:“用户名”,
sortByType:'ASC',
搜索:空,
过滤器:{
已启用:空,
已激活:空,
学生:{/-->这个obj
身份证号码:1
},
角色:{/-->此ob
角色:'管理员'
}
}
};
常数isObject=o=>{
返回(!!o)&(o.constructor==对象);
}
常量buildFilterParams=obj=>{
让filterParams='';
const keyCount=Object.keys(obj).length;
让计数=1;
用于(obj中的常量键){
常量值=对象[键];
如果(!isObject(值)){
if(值!==null&&value!==未定义){
filterParams+=`${key}:${value}`;
如果(键计数>计数){
filterParams+=',';
}
}
计数=计数+1;
}否则{
filterParams+=`${key}.`;
console.log(过滤器参数)
buildFilterParams(值);
}
}
};

buildFilterParams(params)
问题在于嵌套循环,它仍保留上一个循环值并将其绑定到下一个结果。 解决这个问题的几种方法

  • 清除else块中的filterParams值
  • 缓存上一个函数返回的值并添加到下一个递归中

  • 我给你编了一段。请将其设置为**@mplungjan**请检查并更新您的想法。如果您需要更好的实施方法,请告诉我。