2017-04-18 11 views
0

配列の配列と配列に定義されているオブジェクトを識別する運がありません。Lodash _.filter配列の配列内の兄弟を見つける方法

私は、次のデータ

var values = 
[ 
    { 
    "letter": "S", 
    "clients": [ 
    { 
     "_id": "58f61681e32f1927a41c19bf", 
     "firstName": "Shelly", 
     "lastName": "R", 
    } 
    ] 
    }, 
    { 
    "letter": "G", 
    "clients": [ 
     { 
     "_id": "58f2ab99319e35299b1ee4a9", 
     "firstName": "Gary", 
     "lastName": "R", 
     } 
    ] 
    } 
] 

と、次のlodashコールを持っています。

var identifier = '58f2ab99319e35299b1ee4a9'; 
var v = _.filter(values, {clients: [{_id: identifier}]}); 

私はネストされた配列で動作するはずです。 ここに何か不足していますか?

よく私は角度成分のルーティングシナリオでこの_.filterを使用しています。

ただし、values.clientsオブジェクトにはより多くの情報が含まれています。私は実際の出力でそのフィドルを置き換え、それは働いた。インスタンスを返しました。しかし、以下のコードはそうではありません。

}).state('clients.client', { 
     url: '/{clientId}', 
     component: 'client', 
      resolve: { 
        client : function(rolodex, $stateParams, _){ 
         //var values = rolodex; 
         //console.log(JSON.stringify(values)); 
         var identifier = $stateParams.clientId; 

         var v = _.filter(rolodex, {clients: [{_id: identifier}]}); 
         console.log(v[0].clients[0]); 
         return v[0].clients[0]; 
        } 
      } 
    }); 

G.

私はすぐに、このlodashスクリプトが正常に動作しないために話を聞いたと思います。 私のセカンダリ配列に複数のエントリが含まれている場合、結果セットに両方のエントリが表示されます。

[ 
    { 
    "letter": "C", 
    "clients": [ 
     { 
     "_id": "58f6b8a932edbb7dd718f05a", 
     "firstName": "Casie", 
     "lastName": "L" 
     }, 
     { 
     "_id": "58f68b0d527cc336a8f86cc8", 
     "firstName": "Chad", 
     "lastName": "M" 
     } 
    ] 
    }, 
    { 
    "letter": "G", 
    "clients": [ 
     { 
     "_id": "58f2ab99319e35299b1ee4a9", 
     "firstName": "Gary", 
     "lastName": "R" 
     } 
    ] 
    }, 
    { 
    "letter": "J", 
    "clients": [ 
     { 
     "_id": "58f6b90032edbb7dd718f05c", 
     "firstName": "Jett", 
     "lastName": "F" 
     } 
    ] 
    }, 
    { 
    "letter": "S", 
    "clients": [ 
     { 
     "_id": "58f61681e32f1927a41c19bf", 
     "firstName": "Shelly", 
     "lastName": "R" 
     }, 
     { 
     "_id": "58f6b8d632edbb7dd718f05b", 
     "firstName": "Shirley", 
     "lastName": "A" 
     } 
    ] 
    } 
] 

正しい_idを含む正しい配列を返します。

[ 
    { 
     "letter": "S", 
     "clients": [ 
      { 
       "_id": "58f61681e32f1927a41c19bf", 
       "firstName": "Shelly", 
       "lastName": "R" 
      }, 
      { 
       "_id": "58f6b8d632edbb7dd718f05b", 
       "firstName": "Shirley", 
       "lastName": "A" 
      } 
     ] 
    } 
] 

しかし、私はこのように私の結果をしたいと思います。

{ 
    "_id": "58f61681e32f1927a41c19bf", 
    "firstName": "Shelly", 
    "lastName": "R" 
} 

これは私の答えかもしれません。

var b = _(data).thru(function(col1){ 
return _.union(col1, _.map(col1, 'clients')); 
}) 
.flatten() 
.find({_id : '58f61681e32f1927a41c19bf'}); 
+0

これは、Angularの不可知論です。 –

+0

これはうまくいくはずです。[こちらをチェック](https://jsfiddle.net/6qLze9ub/40/) –

+0

正しいことがありますが、私のコードではそうではありません。 brb – muscleman71

答えて

0

この方法は、平均して機能するようです。

var b = _(data).thru(function(col1){ 
return _.union(col1, _.map(col1, 'clients')); 
}) 
.flatten() 
.find({_id : '58f61681e32f1927a41c19bf'}); 
関連する問題