Angular 2管道:如何创建一个将对象与一组对象进行比较的管道?
我需要创建一个管道,根据indexof方法是否显示对象内的各个字符串是否相似,过滤掉一个对象数组。Angular 2管道:如何创建一个将对象与一组对象进行比较的管道?
因此,举例来说,如果我们有数组
[{name: "john",
age: "17"},
{ name: "rob",
age: "20"}
]
,我有过滤器对象
{name: "jo",
age: "1" }
它会返回对象{name: "john", age: "17"}
。
注:数字有目的地作为字符串。
我将如何去做一个这样做的管道?
我不知道的角度,这是你怎么能在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);
我打算按照评论中的建议。你在这里写的会帮助我很多。 – majestyc54
只是一个问题。如果过滤器对象中缺少其中一个变量,这仍然可以工作吗?就像说只是{name:'jo'}没有年龄变量? – majestyc54
你是对的我添加了额外的验证 1:键需要是相同的2:空过滤器将失败; 这是更好的解决方案,如果你在此之前验证过滤器 – Peter
不要滥用管道。管道主要用于最后一英里格式转换,涉及如何显示某些内容,而不是用于业务逻辑,过滤或排序。在组件TS逻辑中实现过滤和排序。 – 2017-08-10 18:51:10