2016-08-23 4 views
1

したがって、私はImmutable.jsを使用していて、通常のImmutable.Mapを持っていて、私が欲しくないときにオブジェクトをソートしていたので、少しオブジェクトを切り替える必要がありましたそれまで(以前は、配列のようにハッシュを使用していました)。 OrderedMapも機能しませんでしたので、私は "新しい"オブジェクトをこのように配置しました。もちろん、objはその順序を保持しています。しかし、今私は特定のIDを取得するたびにそれを反復する必要があります。私はキー(id)を要求するだけのヘルパー機能があれば不思議でした。この場合、適切なobjを取得してください。私は_idが1638であるOBJを望んでいた場合Immutable.jsとキー入力時のショートカット

"sneakers": Immutable.List([ 
    [{_id: 1, color: "red", price: 250}], 
    [{_id: 1638, color: 728, price: 90}] 

等...

ので、私はそれを通してフィルタリングする必要があるだろう。以前は "getIn"だけでした。このデータ構造を与えられたImmutable.jsを使った簡単な方法はありますか?

+0

「マップ」内でいわゆるソートが気になる理由はありますか? –

+0

ええ、私はオブジェクトの構造の順序に従うデフォルトのビューを持っているので。私はデフォルトのビュー配列のセカンダリコンテナを作成しなければならないと思って、それ以上の繰り返しは、私はオブジェクト構造を介して順序を保証できるはずだと思われました。私はハッシュが注文を保証できないことを理解しています - 注文を許可する内蔵機能があることを望んでいました。 –

答えて

2

これは完璧なソリューションではありませんが、常に内側の配列内の一つの目的を持っており、すべての_id年代が一意である場合は、あなたが使用することができます。このソリューションでは

sneakers.find(function(data) { 
    return data.find(function(innerArr) { 
     return innerArr.get("_id") === 1638 
    }) 
    }).get(0).toJS(); 

を、あなたが反復する必要はありません。すべてのList、最初のオカレンスを検出したときに戻ります。

小さなリマインダー:Immutable.Listは、あなたのリストを1つのレベルだけ不変に変換します。内側の配列はまだ変更可能です。 ListではなくfromJS()を使用する必要があります。私のソリューションはfromJS()の使用法のために働いています。

+0

ありがとう..ええ - 私は思ったよりも少し侵入的なものがあると思ったが、破壊するとコードを少し減らすことができた。 –

関連する問題