2017-08-10 27 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

相關問題