2017-10-17 1 views
0

私は、このオブジェクトを持っている:オブジェクトパラメータの1つとしてarrayを使用してオブジェクトの配列をフィルタリングする方法はありますか?

this.contacts = [ 
      { 
       name: "", 
       el: ["one", "two"] 
      }, 
      { 
       name: "", 
       el: ["three", "four"] 
      }] 

私は「2」を検索した場合のみ、最初のオブジェクトが返される方法例えばので、上記をフィルタリングするために?

はこれまでにしてみてくださいマイ:

filterItems(searchTerm) { 

    return this.contacts.filter((item) => { 
     return item.el.filter((user) => { 
      return user.toLowerCase().indexOf(searchTerm.toLowerCase()) > -1; 
     }) 
    }); 

} 

それはもちろん、何も返さない、なぜ?最初.filterインサイド

+0

:私たちは、現在オンになっている配列要素は、それが

実施例に一致する場合、これtrueを返し、search値を通過したと等しい場合、el配列の各反復時に、我々は確認することができますその中に「2」という別のオブジェクトがある場合は、そのオブジェクトも返すべきですか、最初に正常にマッチした後に停止する必要がありますか? – Matt

答えて

1

あなたがArray#includesを使用して、フィルタ条件としてそれを取ることができる.some

var contacts = [{ 
 
    name: "", 
 
    el: ["one", "two"] 
 
    }, 
 
    { 
 
    name: "", 
 
    el: ["three", "four"] 
 
    } 
 
] 
 

 
filterItems = function(searchTerm) { 
 
    return contacts.filter((item) => { 
 
    return item.el.some((user) => { 
 
     return user.toLowerCase().indexOf(searchTerm.toLowerCase()) > -1; 
 
    }) 
 
    }); 
 
} 
 

 
console.log(filterItems("two"))
.as-console-wrapper { max-height: 100% !important; top: 0; }

2

を使用する必要があります。

function filterItems(user) { 
 
    return this.contacts.filter(item => item.el 
 
     .map(s => s.toLowerCase()) 
 
     .includes(user.toLowerCase())) 
 
} 
 

 
var contacts = [{ name: "", el: ["one", "two"] }, { name: "", el: ["thrEE", "four"] }]; 
 

 
console.log(filterItems('THREE'));
.as-console-wrapper { max-height: 100% !important; top: 0; }

0

あなたは同様の効果を実現したいが、ループを使用することによって、あなたは、次の関数を使用することができる場合:

function filterItems(search) { 
    for(let i = 0; i < this.contacts.length; i++) { 
     let obj = this.contacts[i]; 
     for(let j = 0; j < obj.el.length; j++) { 
      if(obj.el[j] === search) return i; 
     } 
    } 
} 

console.log(filterItems("two")); // logs 0 (returns 0) 
console.log(filterItems("four")); // logs 1 (returns 1) 

基本的に最初のループはあなたの連絡先をループするために使用されていますアレイ。そして、2番目は、elプロパティで配列をループするために使用されます。 https://jsfiddle.net/knLbL9b5/(出力用のコンソールをチェックしてください)

関連する問題