2017-12-11 18 views
0

Vue Js 2.0で小さなアプリケーションを構築しています。配列形式の要素をフィルタリングしようとしていますが、要素が次のような単一の文字列であればフォーマットします。Vue JSの配列要素からフィルタリングする方法

const search = this.search_by_name.toLowerCase() 
const searchContact = this.search_by_contact.toLowerCase() 
return this.meetings 
    .map(i => ({ 
     id: i.interaction.id, 
     client_name: i.client.name, 
     contactName: i.contacts_association, 
    })) 
    .filter((item) => 
     item.client_name.toLowerCase().includes(search) 
    ) 

私はitem.contactName.first_name.toLowerCase().includes(searchContact) を持っていると思いますが、この場合にはcontacts_associationが戻ってエラーをスロー配列形式である:

TypeError: item.contactName.toLowerCase is not a function

contacts_associationは、フォーマットを次のようにあります

"contacts_association":[ 
    { 
     "id":431, 
     "first_name":"Nikunj", 
     "last_name":"Doshi", 
     "address":"602-603, 6th Floor, Dalamal House,Nariman Point", 
     "city":"Mumbai", 
     "state":"Maharashtra", 
     "country":"India", 
     "pivot": 
      { 
       "interaction_id":139, 
       "contact_id":431, 
       "company_id":160, 
       "created_at":"2017-09-23 16:42:56", 
       "updated_at":"2017-09-23 16:42:56" 
      }, 
     "company":[ 
      { 
       "id":160, 
       "name":"Bay Capital Investment Managers Pvt Ltd", 
       "address":"602-603, 6th Floor, Dalamal House,Nariman Point", 
       "city":"Mumbai", 
       "state":"Maharashtra", 
       "country":"India", 
       "type":"Investor", 
       "sub_type":"FII", 
       "is_client":0, 
      } 
     ] 
    } 
    { 
     "id":431, 
     "first_name":"Vikash", 
     "last_name":"Kumar", 
     "address":"602-603, 6th Floor, Dalamal House,Nariman Point", 
     "city":"Mumbai", 
     "state":"Maharashtra", 
     "country":"India", 
     "pivot": 
      { 
       "interaction_id":139, 
       "contact_id":431, 
       "company_id":160, 
       "created_at":"2017-09-23 16:42:56", 
       "updated_at":"2017-09-23 16:42:56" 
      }, 
     "company":[ 
      { 
       "id":160, 
       "name":"Investment Managers Pvt Ltd", 
       "address":"Nariman Point", 
       "city":"Mumbai", 
       "state":"Maharashtra", 
       "country":"India", 
       "type":"Investor", 
       "sub_type":"FII", 
       "is_client":0, 
      } 
     ] 
    } 
] 

私はこれで私を助け、first_namelast_nameでフィルターを持っていると思います。

+0

私は全体のデータを共有することができますオブジェクト "this.meetings"私たちと、私はあなたがフィルタのために最初に何かをマップする必要があるので、私は全体のデータを持っている場合はさらに行くことができます –

答えて

4

基本的には、contactNameは連絡先の配列であり、少なくとも1つの連絡先がcontactNameのすべての会議と一致するように、searchContactと一致していますか?

は(未テスト)これを試してみてください:

.filter(item => 
    item.client_name.toLowerCase().includes(search) && 
    item.contactName.some(c => 
    (c.first_name + ' ' + c.last_name).toLowerCase().includes(searchContact) 
) 
) 

また、私はそれは、それぞれ、contactNameclient_nameためcamelCasesnake_caseを混合するために混乱を招く言及する必要があります。一つを選ぶ。

+0

提案ありがとう。それは助けになった。 –

関連する問題