2015-11-20 8 views
6

यह प्रश्न Immutable.js लाइब्रेरी के बारे में है।अपरिवर्तनीय जेएस: अनुक्रमित सूची में सूची बदलें

मेरे पास List<T> है, जहां T{name: string, id: number} है। मैं इसे Map<number, T> में idT के साथ कुंजी में कनवर्ट करना चाहता हूं। मानक विधि toMap का उपयोग करके मुझे अनुक्रमिक अनुक्रमणिका के साथ Map देता है, और वहां हुक करने का कोई तरीका नहीं है। और indexBy या अन्य जैसी कोई विधि नहीं है। उसको कैसे करे?

उत्तर

11

आप इस प्रकार का कम करने के साथ यह कर सकते हैं:

function indexBy(iterable, searchKey) { 
    return iterable.reduce(
     (lookup, item) => lookup.set(item.get(searchKey), item), 
     Immutable.Map() 
    ); 
} 

var things = Immutable.fromJS([ 
    {id: 'id-1', lol: 'abc'}, 
    {id: 'id-2', lol: 'def'}, 
    {id: 'id-3', lol: 'jkl'} 
]); 
var thingsLookup = indexBy(things, 'id'); 
thingsLookup.toJS() === { 
    "id-1": { "id": "id-1", "lol": "abc" }, 
    "id-2": { "id": "id-2", "lol": "def" }, 
    "id-3": { "id": "id-3", "lol": "jkl" } 
}; 
+1

, इस उदाहरण के लिए धन्यवाद मैं कुछ दिनों के लिए इस मुद्दे के साथ संघर्ष कर रहा था –

संबंधित मुद्दे