2017-04-08 10 views
-1

私は現在、膨大な数のオブジェクトをループしなければならない小さなアプリケーションに取り組んでいます。これを実行する最も効率的な方法は何でしょうか?オブジェクトの配列をループし、object.fieldが値と等しい値を返す

var array = [ 
    { 
    id: "1", 
    name: "Alpha" 
    }, 
    { 
    id: "2", 
    name: "Beta" 
    }, 
    ... 
]; 

私はname"Alpha"に等しい各オブジェクトを取得したいのですが。私は現在、単純なifステートメントを使用して、別のname値を持つオブジェクトをフィルタリングしますが、これを実行するより効率的な方法があるかどうかは疑問です。

私はマッチングの結果を新しい配列にプッシュすることに言及する価値があります。

+0

、あなたが本当に何をしたいかによって、あなたにユーザー 'filter'や' map'を何ができているの表示潜在的に多くの千10以上のオブジェクトのように巨大な@Tomalak – funcoding

+0

。私の現在のコードには何も問題はありません。必要なオブジェクトをフィルタするより効率的な方法があるかどうかを尋ねています。 – Enzio

答えて

1

いいえ、それ以上の効率的な方法はありません。

代わりに、目的の要素をより迅速に見つけることができる何らかの内部データ構造を構築して維持することができます。いつものように、このような構造を維持する作業と保存する作業との間のトレードオフがあります。

0

私はそれがより効果的だとわかる方法はありません。

名前でオブジェクトを注文した場合、名前が "Alpha"ではないオブジェクトに到達すると、検索が停止する可能性があります。

探している最初のオブジェクトを見つけるには、バイナリ検索を使用できます。このオブジェクトから、両端に「Alpha」または配列の末尾にないオブジェクトに到達するまで上下に移動します。

これは、最適化の方法であり、配列のソートに時間がかかるだけでなく、要素を追加するときに時間がかかります。

0

この種のタスクにはJavaScript機能があります。ドキュメントからフィルタ

フィルタ()メソッドは、提供される機能によって実装テストに合格するすべての要素を使用して新しい配列を作成します。ここで

特定の「名前」フィールドに持つ配列からすべての要素を取得するためのコードで小さな例です:あなたは複数回の収集が必要な場合

const arr = [ 
 
    {name: 'Abc'}, 
 
    {name: 'Xyz'}, 
 
    {name: 'Lmn'}, 
 
    {name: 'Xyz'}, 
 
    {name: 'Xyz'} 
 
]; 
 

 
let response = findByName('Xyz'); 
 
console.log(response); 
 

 
function findByName (name) { 
 
    return arr.filter((element) => { 
 
    return element.name = name; 
 
    }); 
 
}

0

を指定された名前で、ハッシュとして名前を持つオブジェクトを使用して、アイテムに即座にアクセスできます。

var array = [{ id: "1", name: "Alpha" }, { id: "2", name: "Beta" }, { id: "3", name: "Beta" }, { id: "4", name: "Gamma" }, { id: "5", name: "Beta" }, { id: "2", name: "Alpha" }], 
 
    hash = Object.create(null); 
 
    
 
array.forEach(function (a) { 
 
    if (!hash[a.name]) { 
 
     hash[a.name] = []; 
 
    } 
 
    hash[a.name].push(a); 
 
}); 
 

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

+0

@Kinduserでは、すべての名前を独自の配列にグループ化することで、異なるアプローチです。オブジェクトのキーとして名前を使用することで、後で高速アクセスが可能になります。 –

関連する問題