2017-03-03 24 views
8

私の配列はこのようになります属性値に基づいて配列からオブジェクトを取ります。活字体は

その配列にWHEREステートメントを使用する簡単な方法はありますか?

はobject.id = VAR

または私はちょうど配列全体をループする必要があり、すべての項目をチェックしますかオブジェクトを取りますか?私の配列は、100以上のエントリを持っているので、私は

答えて

1

私はfilterreduce使用したい、より効率的な方法があったかどうかを知りたいと思った:あなたが気にした場合

let array = [ 
    { id: 1, value: "itemname" }, 
    { id: 2, value: "itemname" } 
]; 

let item1 = array.filter(item => item.id === 1)[0]; 
let item2 = array.reduce((prev, current) => prev || current.id === 1 ? current : null); 

console.log(item1); // Object {id: 1, value: "itemname"} 
console.log(item2); // Object {id: 1, value: "itemname"} 

code in playground

をアレイ全体を反復すると、次に使用some

let item; 
array.some(i => { 
    if (i.id === 1) { 
     item = i; 
     return true; 
    } 
    return false; 
}); 

code in playground

+3

配列には、最初の出現を返すfind()メソッドがあります。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/ –

+0

@JánHalaša確かに、私はそのことを忘れていました。答えとして投稿するべきです。私はそれに投票します。 –

1

あなたは配列をループする必要がありますが、各IDをインデックスにリンクして保存するハッシュマップを作成した場合は、それを一度だけ行う必要があります。そのあとobjeftを直接参照することができます:

var idReference = myArray.reduce(function(map, record, index) { 
    map[ record.id ] = index; 
    return map; 
}, {}); 

var objectWithId5 = myArray[ idReference["5"] ]; 

これはすべてのIDが一意だと仮定していますが、

+1

より効率的なデータ構造を作るために使用できるMapクラスがあります。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map –

+0

確かに。一度IE Edgeにアップグレードするか、modernizrを使用することにします。 Reduceなどはより広くサポートされています。ただし、各オブジェクトを参照するコードは、.get()を使用するので、もっと長くなる可能性があります。とにかくこの構造にコンパイルされるので、マットしないOPのために。 – Shilly

0

あなたはすべてのフィールドから値を検索する必要がある場合は、動的に活字体を使用してオブジェクトの配列内の特定の値を検索することができます列を指定しないオブジェクト

var searchText = 'first'; 

let items = [ 
      { id: 1, name: "first", grade: "A" }, 
      { id: 2, name: "second", grade: "B" } 
     ]; 

This below code will search for the value 

var result = items.filter(item => 
      Object.keys(item).some(k => item[k] != null && 
      item[k].toString().toLowerCase() 
      .includes(searchText.toLowerCase())) 
      ); 

同じアプローチを使用して、 ea TypeJScriptのanglejs 4の検索フィルターパイプ