개체에서 가장 높은 값으로 키 가져 오기


82

다음과 같은 개체가 있습니다.

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

가장 큰 값 식별자 (여기 :)를 어떻게 빠르게 가져올 b수 있습니까? 배열로 변환 한 다음 정렬을 시도했지만 알파벳순으로 정렬 되었기 때문에 작동하지 않았습니다 (그리고 3 개 중 하나의 값을 얻기 위해 데이터를 앞뒤로 저글링하는 것은 과잉 인 것 같습니다).


당신은 2또는 b그 결과 를 원하십니까
Naeem Shaikh

2
나는 얻고 싶다 b;-)
Tomek Buszewski 2014

참조 : stackoverflow.com/questions/11142884/... .. 보너스 대답 :이 질문에 대해 최대와 함께뿐만 아니라 분의 가치를 .. :)
수 디르 Bastakoti에게

답변:


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
많은 항목이 작품 있습니다 .. 함수 배열 전체를 통해 반복 줄이기)
파리스 Zacina

귀찮아서 미안하지만, 어떻게 2외도 얻을 수 b있습니까?
Tomek Buszewski 2014

@CD ..이 경우 "var obj = {a : 1, b : 2, c : 2};" 그것은 단지 c를 반환하지만 B & C 필요, 가장 높은 값을 가진 모든 키를 의미
네쉬

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

밑줄 또는 Lo-Dash 사용 :

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

ES6 Arrow 기능 :

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

9

다음은 최대 값이 하나뿐 아니라 동일한 값이 많은 경우에 대한 제안입니다.

    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'를 반환합니다 .`


안녕하세요, 객체 var를 정확히 어디에 넣어야합니까? console.log 때 "function getMax ()"를 얻습니다
Jeff

1
object위의 함수가 취하는 인수이며, 위는 함수 정의를위한 ES6 구문이며, 다음과 동일합니다. function getMax(object)질문에 대한 답변이됩니까?
polyccon

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.