2012-06-25 21 views
10

आमतौर पर जब मैं मैं इस बहुत ही सरल कोड का उपयोग एक सरणी के अधिकतम मूल्य खोजने की जरूरत है: var max = Math.max.apply(Math, array);जावास्क्रिप्ट अधिकतम() सरणी स्तंभ के लिए

हालांकि, अब मैं एक बहुआयामी सरणी जो प्रत्येक पंक्ति के लिए में मेरे पास है 5 कॉलम के साथ एक सरणी। क्या किसी निश्चित कॉलम के लिए अधिकतम मान खोजने का कोई तरीका है? अभी मैं कर रहा हूँ:

var maxFunc = function(data){ 
    var max = 0; 
    data.forEach(function(value){ 
     max = Math.max(max, value[0]); 
    }); 
    return max; 
}; 

मैं अगर वहाँ ऐसा करने का एक खूबसूरत/आसान तरीका था उत्सुक था?

उत्तर

12

मैं इस तरह के रूप में यह लिखा है:

Math.max.apply(Math, array.map(function(v) { 
    return v[0]; 
})); 

array.map अपने पिकिंग तर्क के आधार पर मूल सरणी बदल सकते हैं, इस मामले में पहले आइटम लौटने। बदल देता है तो Math.max()

9

में खिलाया जाता है इस Array.prototype.reduce के लिए एक महान अनुप्रयोग है:

max = data.reduce(function(previousVal, currentItem, i, arr) { 
    return Math.max(previousVal, currentItem[0]); 
}, Number.NEGATIVE_INFINITY); 

यह भी अपने कोड में बग है कि अगर data में सभी मान 0 से कम हैं क्या होगा बचा जाता है। आपको 0 के बजाय Number.NEGATIVE_INFINITY के विरुद्ध तुलना करना चाहिए।

max = data.map(function (d) { 
    return d[0]; 
}).reduce(function (p, c, i, arr) { 
    return Math.max(p, c); 
}); 
:

वैकल्पिक रूप से, आप अधिकतम मूल्य को कम करने से पहले डेटा को सामान्य कर सकता है

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