2017-08-10 63 views
0

我需要创建一个管道,根据indexof方法是否显示对象内的各个字符串是否相似,过滤掉一个对象数组。Angular 2管道:如何创建一个将对象与一组对象进行比较的管道?

因此,举例来说,如果我们有数组

[{name: "john", 
age: "17"}, 
{ name: "rob", 
age: "20"} 
] 

,我有过滤器对象

{name: "jo", 
age: "1" } 

它会返回对象{name: "john", age: "17"}

注:数字有目的地作为字符串。

我将如何去做一个这样做的管道?

+0

不要滥用管道。管道主要用于最后一英里格式转换,涉及如何显示某些内容,而不是用于业务逻辑,过滤或排序。在组件TS逻辑中实现过滤和排序。 – 2017-08-10 18:51:10

回答

1

我不知道的角度,这是你怎么能在JavaScript中做什么,我希望它能帮助

var data = [{name: "john", 
age: "17"}, 
{ name: "rob", 
age: "20"} 
]; 

var filter = {name: "jo", age: "1" }; 

var filtered = data.filter(function (person) { 
    // check objects keys are the same 
    if (Object.keys(person).join("") !== Object.keys(filter).join("")) return false; 

    //compare values 
    for (var key in filter) { 
     //false if empty string 
     if (filter[key] === "") return false; 
     if(person[key].indexOf(filter[key])) { 
      return false; 
     } 
    } 
    return true; 
}); 
console.log(filtered); 
+0

我打算按照评论中的建议。你在这里写的会帮助我很多。 – majestyc54

+0

只是一个问题。如果过滤器对象中缺少其中一个变量,这仍然可以工作吗?就像说只是{name:'jo'}没有年龄变量? – majestyc54

+0

你是对的我添加了额外的验证 1:键需要是相同的2:空过滤器将失败; 这是更好的解决方案,如果你在此之前验证过滤器 – Peter

相关问题