2016-07-03 4 views
-1

ネストされた配列に特定の 'id'を持つすべてのオブジェクトを返そうとしています。サンプルデータでは、趣味IDが2(ハイキング)のすべての人物オブジェクトを返したいと思います。ネストされた配列の値に基づいてオブジェクトを返す方法は? (Javascript)

もう1つの質問は、オブジェクト値に基づいて配列内のすべての値を見つける問題を解決します。

この質問は、ネストされた配列内の値に基づいてすべてのオブジェクトを返す必要があるため、以前のものとは異なります。

[ 
    { 
     "id":111222, 
     "name":"Faye", 
     "age":27, 
     "hobbies":[ 
     { 
      "id":2, 
      "name":"hiking" 
     }, 
     { 
      "id":3, 
      "name":"eating" 
     } 
     ] 
    }, 
    { 
     "id":223456789001, 
     "name":"Bobby", 
     "age":35, 
     "hobbies":[ 
     { 
      "id":2, 
      "name":"hiking" 
     }, 
     { 
      "id":4, 
      "name":"online gaming" 
     } 
     ] 
    } 
] 
+0

[オブジェクト配列内のネストされた配列から特定の値にアクセスする方法は?](http://stackoverflow.com/questions/38166623/how-to-access-specific-value-from-a-オブジェクト配列内の入れ子配列) –

+3

あなたは既にここで同じ質問をしていますか? http://stackoverflow.com/questions/38166623/how-to-access-specific-value-from-a-nested-array-within-an-object-array –

+1

親愛なるジャスミン、SOは無料サイトのコードを取得していません。あなたも努力を分かち合わなければなりません。 – Rajesh

答えて

2
function hasHobby(person, hobbyId) { 
    return person.hobbies.some(function(hobby) { 
    return hobby.id === hobbyId; 
    }); 
} 

function filterByHobby(people, hobbyId) { 
    return people.filter(function(person) { 
    return hasHobby(person, hobbyId); 
    }); 
} 

新しいクールなES6の構文を使用したい場合:

function filterByHobby(people, hobbyId) { 
    return people.filter(
    person => person.hobbies.some(
     hobby => hobby.id === hobbyId 
    ) 
); 
} 
+0

OMGこれは完璧に機能しました!私はES6が大好き! – Jasmin

0
var arr = [ 
    { 
     "id":111222, 
     "name":"Faye", 
     "age":27, 
     "hobbies":[ 
     { 
      "id":2, 
      "name":"hiking" 
     }, 
     { 
      "id":3, 
      "name":"eating" 
     } 
     ] 
    }, 
    { 
     "id":223456789001, 
     "name":"Bobby", 
     "age":35, 
     "hobbies":[ 
     { 
      "id":2, 
      "name":"hiking" 
     }, 
     { 
      "id":4, 
      "name":"online gaming" 
     } 
     ] 
    } 
]; 

arr.filter(function(obj) { 
var hobbies = obj.hobbies; 
var x = hobbies.filter(function(hob) { 
    if (hob.id == "2") return true; 
}); 

if (x.length > 0) return true; 
}); 
+0

代わりに 'return hobbies.some'を使うことができます。 – Rajesh

+0

ありがとうございました。ありがとうございました –

0

私はそのあなたのprobleを解決すると思うが、これを試してみてください:

var arr = [{ 
 
    "id": 111222, 
 
    "name": "Faye", 
 
    "age": 27, 
 
    "hobbies": [{ 
 
    "id": 2, 
 
    "name": "hiking" 
 
    }, { 
 
    "id": 3, 
 
    "name": "eating" 
 
    }] 
 
}, { 
 
    "id": 223456789001, 
 
    "name": "Bobby", 
 
    "age": 35, 
 
    "hobbies": [{ 
 
    "id": 2, 
 
    "name": "hiking" 
 
    }, { 
 
    "id": 4, 
 
    "name": "online gaming" 
 
    }] 
 
}]; 
 
var x = arr.filter(function(el) { 
 
    var rnel = el.hobbies.filter(function(nel) { 
 
    return nel.id == 2; 
 
    }); 
 
    return rnel.length > 0 ? true :false; 
 
}); 
 
alert(x.length);

+0

いい実行例 –

+0

@ジャスミンはあなたのために働いていますか? –

関連する問題