2017-01-09 41 views
1

這在技術上有效,但感覺笨重。有沒有更有效的方法來檢查一個特定的屬性是否返回true,如果是,將其推送到一個數組,然後檢查下一個需要的屬性,依此類推?如果存在財產,將其推送到數組

例如:

let createHero = { 
     name: "OJ", 
     trauma1: "abc", 
     trauma2: "def", 
     nickname: "spool" 
    } 

    let trauma = []; 

     if (createHero.trauma1){ 
     trauma.push(createHero.trauma1) 
     } 
     if (createHero.trauma2){ 
     trauma.push(createHero.trauma2) 
     } 
     if (createHero.trauma3){ 
     trauma.push(createHero.trauma3) 
     } 
     if (createHero.birthDate){ 
     trauma.push(createHero.birthDate) 
     } 
     if (createHero.name){ 
     trauma.push(createHero.name) 
     } 

    console.log(trauma) //[ "abc" , "def", "OJ" ] 

我建立這一個AngularJs-Express應用程序裏面,所以我不想使用jQuery。

我錯過了什麼?也許正則表達式可以幫忙嗎?

UPDATE

我去主要由@andersVestergaard提供此功能。它允許我爲它提供一個對象和模式,並返回數組中匹配屬性的值。

 //filter is a regex pattern 
    let filterForValues = function(object, filter) { 
     let key, keys = []; 
      for (key in object) { 
       if (object.hasOwnProperty(key) && filter.test(key)) { 
       keys.push(object[key]); 
      } 
      } 
      return keys; 
     } 

     let traumaArray = filterForValues(createHero, /trauma/i); 

     console.log(traumaArray); //[ "abc" , "def"] 
+0

你嘗試過用angular.forEach()? –

回答

2

如果我理解正確,你可以通過這樣與for..in結合使用對象循環:

for (var key in createHero) { 
     if (createHero.hasOwnProperty(key)) { 
     trauma.push(createHero[key]); 
     } 
} 
+0

啊,這就是我以後的樣子。現在,我將添加到此以便我可以搜索幾個不同的鍵。謝謝! –

+0

酷沒問題! –