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

問題はありません! –

関連する問題