Javascript 使用筛选器查找匹配的键和值

Javascript 使用筛选器查找匹配的键和值,javascript,Javascript,我需要检查json中是否存在键值对 filter: {department_Id: 20} tk: {department_Id: 22, timekeeper_Name: "Tesvtda", office_Id: 2, position_Id: 1} 我可以检查对象中是否存在筛选键: return tk.hasOwnProperty(Object.keys(filter)) ; 但是,我现在如何检查该值 全功能: filteredTimekeeperList: function() {

我需要检查json中是否存在键值对

filter: {department_Id: 20}
tk: {department_Id: 22, timekeeper_Name: "Tesvtda", office_Id: 2, position_Id: 1}
我可以检查对象中是否存在筛选键:

return tk.hasOwnProperty(Object.keys(filter)) ;
但是,我现在如何检查该值

全功能:

filteredTimekeeperList: function() {
  return this.timekeepersList.filter(tk => {
    return this.filters.forEach(filter => {
      console.log(filter, tk);
      console.log(tk.hasOwnProperty(Object.keys(filter)));
      return tk.hasOwnProperty(Object.keys(filter)) ; // True, now I need to return if both are matches
    });
  });
}
例如:


您可以这样做:

如果给定键的值与filters数组对象的值匹配,则需要过滤
timeKeepersList
。这是非常有用的地方

使用
.every()
将确保
过滤器中每个对象中的每个键都与给定计时器的键匹配。使用
.some()
将返回一个给定的计时器,如果
过滤器
数组中any对象的any键与计时器的键匹配

当然,你也可以根据你的情况混合搭配。如果要在任何对象与所有键匹配或所有对象与任何键匹配时返回计时器。这些情况分别是
.some()->.every()
.every()->.some()
var timekeepersList=[
{
部门编号:20,
计时器名称:“测试”,
办公室编号:1,
职位编号:1
},
{
部门编号:21,
计时器名称:“Tesd332t”,
办公室编号:1,
职位编号:1
},
{
部门编号:20,
计时器名称:“Tesct123”,
办公室编号:2,
职位编号:2
},
{
部门编号:21,
计时器名称:“Tesat1ffg23”,
办公室编号:2,
职位编号:2
},
{
部门编号:22,
计时员姓名:“Tesvtda”,
办公室编号:2,
职位编号:1
}
];
变量过滤器=[{department_Id:20}];
var filteredData=timekeepersList.filter(tk=>{
//如果需要部分匹配,请将.every改为.some
返回筛选器。每个(函数)(筛选器){
//如果需要部分匹配,请将.every改为.some
返回对象.keys(过滤器).every(函数(键){
返回tk[key]==过滤器[key];
});
});
});

console.log(filteredData)您可以这样做:

如果给定键的值与filters数组对象的值匹配,则需要过滤
timeKeepersList
。这是非常有用的地方

使用
.every()
将确保
过滤器中每个对象中的每个键都与给定计时器的键匹配。使用
.some()
将返回一个给定的计时器,如果
过滤器
数组中any对象的any键与计时器的键匹配

当然,你也可以根据你的情况混合搭配。如果要在任何对象与所有键匹配或所有对象与任何键匹配时返回计时器。这些情况分别是
.some()->.every()
.every()->.some()
var timekeepersList=[
{
部门编号:20,
计时器名称:“测试”,
办公室编号:1,
职位编号:1
},
{
部门编号:21,
计时器名称:“Tesd332t”,
办公室编号:1,
职位编号:1
},
{
部门编号:20,
计时器名称:“Tesct123”,
办公室编号:2,
职位编号:2
},
{
部门编号:21,
计时器名称:“Tesat1ffg23”,
办公室编号:2,
职位编号:2
},
{
部门编号:22,
计时员姓名:“Tesvtda”,
办公室编号:2,
职位编号:1
}
];
变量过滤器=[{department_Id:20}];
var filteredData=timekeepersList.filter(tk=>{
//如果需要部分匹配,请将.every改为.some
返回筛选器。每个(函数)(筛选器){
//如果需要部分匹配,请将.every改为.some
返回对象.keys(过滤器).every(函数(键){
返回tk[key]==过滤器[key];
});
});
});

console.log(filteredData)是否可以有多个筛选键?如果是,您想检查一个匹配还是所有匹配?可以是多个。我将添加测试数据是否要检查所有匹配项,或者是否有任何匹配项?请参见示例。但它会根据过滤器数组中的内容搜索所有过滤器。不太清楚预期结果是什么。是否会有多个过滤器键?如果是,您想检查一个匹配还是所有匹配?可以是多个。我将添加测试数据是否要检查所有匹配项,或者是否有任何匹配项?请参见示例。但它会根据过滤器数组中的内容搜索所有过滤器。不太清楚预期结果是什么。谢谢。我知道有一条捷径。每一个都是我一直在寻找的。谢谢你的帮助,谢谢。我知道有一条捷径。每一个都是我一直在寻找的。谢谢你的帮助
Input:
 timekeepersList: [
        {
          department_Id: 20,
          timekeeper_Name: "Test",
          office_Id: 1,
          position_Id: 1
        },
        {
          department_Id: 20,
          timekeeper_Name: "Test",
          office_Id: 1,
          position_Id: 1
        },
        {
          department_Id: 21,
          timekeeper_Name: "Test",
          office_Id: 1,
          position_Id: 1
        }
      ],
      filters: [
        {
          department_Id: 21
        }
      ]

Output: 
        {
          department_Id: 21,
          timekeeper_Name: "Test",
          office_Id: 1,
          position_Id: 1
        }