2017-01-09 65 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

酷没问题! –

相关问题