オブジェクトから最大値のキーを取得する


82

私はそのようなオブジェクトを持っています:

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

最大値の識別子(ここでは:)をすばやく取得するにはどうすればよいbですか?配列に変換してから並べ替えてみましたが、アルファベット順に並べ替えられていたため、うまくいきませんでした(3つのうち1つの値を取得するためだけにデータをやりとりするのはやり過ぎのようです)。


取得したいです2b、それとも結果として
Naeem Shaikh 2014

2
私が取得したいb;-)
Tomek Buszewski

参照:: stackoverflow.com/questions/11142884/… ..ボーナス回答::この回答では最大値とともに最小値も取得します.. :)
Sudhir Bastakoti 2014

回答:


132

例えば:

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);

1
ありがとうございますが、のようなアイテムがさらにある可能性があることに注意してくださいc, d, e... x
Tomek Buszewski 2014

7
これはより多くのアイテムで機能します
。reduce

ご迷惑をおかけして申し訳ありませんが、どうすれば2他にも手に入れることができbますか?
Tomek Buszewski 2014

@CD ..この場合にこれを使用すると "var obj = {a:1、b:2、c:2};" cのみを返しますが、bとcが必要です。つまり、最も高い値を持つすべてのキーを意味します
Dinesh 2016年

3
@Dinesh、試してみてください: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; }, []);
CD ..

34

アンダースコアまたはローダッシュの使用:

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

ES6矢印関数を使用する場合:

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

jsFiddleデモ


14
Lo-Dash 4.0.0の時点で、これはになっているはずvar maxKey = _.maxBy(_.keys(obj), function (o) { return obj[o]; });です。
thodic 2017年

9

最大値が1つだけではなく、等しい値が多数ある場合の提案を次に示します。

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

これは、等しい値を持つものがある場合に備えて、最大値を持つすべてのキーを含む配列を返します。例:if

const obj = {apples:1、bananas:1、pears:1}
//これは['apples'、 'bananas'、 'pears']を返します

一方、最大値がある場合:

const obj = {リンゴ:1、バナナ:2、梨:1}; //これは['bananas']を返します
--->配列から文字列を取得するには:['bananas'] [0] // 'bananas'`を返します


こんにちは、オブジェクト変数を正確にどこに配置する必要がありますか?console.logを実行すると、「関数getMax()」が表示されます
Jeff

1
object上記の関数が取る引数は、上記は関数を定義するためのES6構文であり、次と同等です。function getMax(object)、それはあなたの質問に答えますか?
polyccon 2018年

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));

0

const data = {
  abc: '',
  myShortKey: '',
  myVeryLongKey: ''
}


const longestKeyLength = Math.max(...Object.keys(data).map((d) => d.length));

console.log(longestKeyLength);

console.log(Object.entries(data).map(([key, val]) => `${key}: ${key.length}`));

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.