我有一个这样的对象:
Object {a: 1, b: 2, undefined: 1}
如何快速从中提取最大的标识符(在这里b:)?我尝试将其转换为数组然后进行排序,但由于它是按字母顺序排序的,因此无法解决(为了获得三个值中的一个而来回处理数据似乎是一种过大的杀伤力)。
我有一个这样的对象:
Object {a: 1, b: 2, undefined: 1}
如何快速从中提取最大的标识符(在这里b:)?我尝试将其转换为数组然后进行排序,但由于它是按字母顺序排序的,因此无法解决(为了获得三个值中的一个而来回处理数据似乎是一种过大的杀伤力)。
b;-)
Answers:
例如:
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);
c, d, e... x。
2除价b?
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; }, []);
使用下划线或下划线:
var maxKey = _.max(Object.keys(obj), function (o) { return obj[o]; });
使用ES6箭头功能:
var maxKey = _.max(Object.keys(obj), o => obj[o]);
var maxKey = _.maxBy(_.keys(obj), function (o) { return obj[o]; });。
如果您有许多相等的值,而不仅仅是一个最大值,这是一个建议:
const getMax = object => {
return Object.keys(object).filter(x => {
return object[x] == Math.max.apply(null,
Object.values(object));
});
};
如果有一些键的值相等,则返回一个数组,所有键的最大值。例如:如果
const obj = {苹果:1,香蕉:1,梨:1}
//这将返回['apples','bananas','pears']
另一方面,如果有最大值:
const obj = {苹果:1,香蕉:2,梨:1}; //这将返回['bananas']
--->要从数组中取出字符串:['bananas'] [0] //返回'bananas'`
object是上面的函数采用的参数,上面是用于定义函数的ES6语法,等效于:function getMax(object),这是否回答了您的问题?
假设您有一个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]);
2还是b结果