다음과 같은 개체가 있습니다.
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]);
답변
다음은 최대 값이 하나뿐 아니라 동일한 값이 많은 경우에 대한 제안입니다.
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}`));
답변
