2015-09-16 7 views
6

का उपयोग कर जावास्क्रिप्ट में एक साहचर्य सरणी बनाना मैं निम्न स्वरूपनक्शा समारोह

[{'list': 'one', 'item': 1}, 
{'list': 'one', 'item': 2}, 
{'list': 'one', 'item': 3}, 
{'list': 'two', 'item': 1}, 
{'list': 'two', 'item': 2}] 

के साथ वस्तुओं की एक सरणी है और मैं इसे इस

[{'one': [1, 2, 3]}, 
{'two': [1, 2]}] 

तरह बदलना चाहते हैं मैं यह कर सकता कैसे Array.map फ़ंक्शन का उपयोग कर? यह सबसे अच्छा विकल्प है?

उत्तर

1
अपने विशिष्ट प्रश्न के लिए

:

// Let x hold your array of objects. 

res={}; // Create an empty object that will hold the answer 

x.forEach (function (e) { // Use this function to iterate over each item in the list 
    res[e.list] = res[e.list] || []; // inspired by the Nina Scholz answer below 
    res[e.list].push(e.item); // Append the result to the array 
}); 
+1

आप को स्वीकार करना चाहिए नीना स्कोल्ज़ नीचे जवाब। यह सुरुचिपूर्ण है, परिणाम परिवर्तनीय को म्यूट नहीं करता है, और 'कम करें' प्रदान करता है, जो सीखने के लायक है। जब आप कार्यात्मक प्रोग्रामिंग चुनते हैं तो यह आसान होगा। –

1

जो आप खोज रहे हैं वह एक समूह-विधि है। https://codereview.stackexchange.com/questions/37028/grouping-elements-in-array-by-multiple-properties

कोड:

function groupBy(array , f) 
{ 
    var groups = {}; 
    array.forEach(function(o) 
    { 
    var group = JSON.stringify(f(o)); 
    groups[group] = groups[group] || []; 
    groups[group].push(o); 
    }); 
    return Object.keys(groups).map(function(group) 
    { 
    return groups[group]; 
    }) 
} 

var result = groupBy(list, function(item) 
{ 
    return [item.lastname, item.age]; 
}); 
8

आप अपने कार्य के लिए Array.prototype.reduce उपयोग कर सकते हैं इस प्रश्न का एक अच्छा जवाब है। यह अगली कॉल के लिए कॉलबैक फ़ंक्शन में वापसी मूल्य की अनुमति देता है।

var data = [ 
 
     { 'list': 'one', 'item': 1 }, 
 
     { 'list': 'one', 'item': 2 }, 
 
     { 'list': 'one', 'item': 3 }, 
 
     { 'list': 'two', 'item': 1 }, 
 
     { 'list': 'two', 'item': 2 } 
 
    ], 
 
    flat = data.reduce(function (r, a) { 
 
     r[a.list] = r[a.list] || []; 
 
     r[a.list].push(a.item); 
 
     return r; 
 
    }, {}); 
 

 
document.write('<pre>' + JSON.stringify(flat, 0, 4) + '</pre>');

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