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

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

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

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



답변

예를 들면 :

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


답변

밑줄 또는 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 데모


답변

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

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


답변

다음 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]);


답변

아주 기본적인 방법입니다. 처리 속도가 느릴 수 있음

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


답변

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


답변