如果属性存在,则将其推送到数组

时间:2017-01-09 23:18:16

标签: angularjs iteration

这在技术上有效,但感觉很笨重。是否有更有效的方法来检查特定属性是否返回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。

我错过了什么?也许正则表达式可以帮忙吗?

更新

我使用的功能主要由@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"]

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您可以使用for..in循环遍历该对象:

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