वस्तु से उच्चतम मूल्य के साथ कुंजी प्राप्त करना


88

मेरे पास एक वस्तु है जैसे:

Object {a: 1, b: 2, undefined: 1} 

मैं इससे सबसे बड़ी मूल्य पहचानकर्ता (यहां:) को कैसे जल्दी से खींच सकता हूं b? मैंने इसे सरणी में बदलने और फिर छँटाई करने की कोशिश की, लेकिन यह काम नहीं आया, क्योंकि यह वर्णानुक्रम में क्रमबद्ध हो गया (और यह तीन से एक मान प्राप्त करने के लिए डेटा को आगे-पीछे करने के लिए ओवरकिल की तरह लगता है)।


क्या आप प्राप्त करना चाहते हैं 2या bपरिणाम के रूप में
— नईम शेख

2
मैं पाना चाहता हूं b;-)
— टोमेक बुस्ज़वेस्की

देखें :: stackoverflow.com/questions/11142884/… .. बोनस उत्तर :: आपको इस उत्तर में अधिकतम के साथ-साथ न्यूनतम मूल्य भी मिलता है .. :)
— सुधीर बस्ताकोटी

जवाबों:


143

उदाहरण के लिए:

var obj = {a: 1, b: 2, undefined: 1};

Object.keys(obj).reduce(function(a, b){ return obj[a] > obj[b] ? a : b });

में ES6 :

var obj = {a: 1, b: 2, undefined: 1};

Object.keys(obj).reduce((a, b) => obj[a] > obj[b] ? a : b);

2
धन्यवाद, लेकिन कृपया ध्यान दें कि अधिक आइटम हो सकते हैं, जैसे c, d, e... x।
— टोमेक बुस्जेव्स्की

9
यह अधिक आइटमों के लिए काम करता है .. कम फ़ंक्शन पूरे सरणी के माध्यम से एक पुनरावृत्ति है;)
— फारिस ज़सीना

एक परेशान होने के लिए क्षमा करें, लेकिन मुझे एक 2अतिरिक्त कैसे मिल सकता है b?
— टोमेक बुस्जेव्स्की

@CD .. अगर मैं इस मामले में "var obj = {a: 1, b: 2, c: 2}?"; यह केवल c पर लौटता है, लेकिन मुझे b & c की आवश्यकता है, उच्चतम मान के साथ सभी कुंजियों का अर्थ है
— दिनेश

3
@ दिनेश, कोशिश:var obj = {a: 1, b: 2, c: 2}, keys = Object.keys(obj), largest = Math.max.apply(null, keys.map(x => obj[x])) result = keys.reduce((result, key) => { if (obj[key] === largest){ result.push(key); } return result; }, []);
— सीडी ..

35

अंडरस्कोर या लो-डैश का उपयोग करना:

var maxKey = _.max(Object.keys(obj), function (o) { return obj[o]; });

ES6 एरो फ़ंक्शंस के साथ:

var maxKey = _.max(Object.keys(obj), o => obj[o]);

jsFiddle डेमो


15
लो-डैश 4.0.0 के रूप में यह अब होना चाहिए var maxKey = _.maxBy(_.keys(obj), function (o) { return obj[o]; });।
— त्रयोदशी

9

इस मामले में एक सुझाव है कि आपके पास कई समान मूल्य हैं और न केवल एक अधिकतम:

    const getMax = object => {
        return Object.keys(object).filter(x => {
             return object[x] == Math.max.apply(null, 
             Object.values(object));
       });
    };

यह एक सरणी देता है, जिसमें अधिकतम मूल्य के साथ उन सभी के लिए कुंजियाँ होती हैं, जब कुछ समान मान होते हैं। उदाहरण के लिए: यदि

const obj = {सेब: 1, केले: 1, नाशपाती: 1}
// यह वापस आएगा ['सेब', 'केले', 'नाशपाती']

अगर दूसरी तरफ एक अधिकतम है:

const obj = {सेब: 1, केले: 2, नाशपाती: 1}; // यह वापस आ जाएगा ['केले']
---> स्ट्रिंग को सरणी से बाहर निकालने के लिए: ['केले'] [0] // रिटर्न 'केले'


नमस्ते, मुझे ऑब्जेक्ट var को वास्तव में कहां रखना चाहिए? जब मैं सांत्वना देता हूं। मुझे एक "फंक्शन गेटमैक्स ()" मिलता है
— जेफ

1
objectक्या यह तर्क है कि ऊपर दिया गया कार्य, उपरोक्त फ़ंक्शन को परिभाषित करने के लिए ES6 सिंटैक्स है, इसके बराबर: function getMax(object)क्या यह आपके प्रश्न का उत्तर देता है?
— पॉलीकॉन

6

आप Objectइस तरह से देख रहे हैं:

var obj = {a: 1, b: 2, undefined: 1}

तुम यह केर सकते हो

var max = Math.max.apply(null,Object.keys(obj).map(function(x){ return obj[x] }));
console.log(Object.keys(obj).filter(function(x){ return obj[x] == max; })[0]);

4

बहुत बुनियादी विधि। प्रक्रिया धीमी हो सकती है

var v = {a: 1, b: 2, undefined: 1};

function geth(o){
    var vals = [];    
    for(var i in o){
       vals.push(o[i]);
    }

    var max = Math.max.apply(null, vals);

     for(var i in o){
        if(o[i] == max){
            return i;
        }
    }
}

console.log(geth(v));

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.