Javascript 在Lodash中获取排序属性的键
我想返回由Javascript 在Lodash中获取排序属性的键,javascript,lodash,Javascript,Lodash,我想返回由\uu.orderBy()方法返回的第一个对象的键,该方法按嵌套属性排序 在本例中,我要返回的键是“charlie” 这不是获得最高奖金金额的最有效方法。排序为O(n log n)。您可以在O(n)时间内找到最高值。这还将创建列表的临时副本,以便为临时操作使用大量额外内存。使用ux.maxBy()会更有效 var x = _.maxBy(ob, (e) => { return e.lottery.jackpotAmount; }); return x.id; 这些函数用于列表。
\uu.orderBy()
方法返回的第一个对象的键,该方法按嵌套属性排序
在本例中,我要返回的键是“charlie”
这不是获得最高奖金金额的最有效方法。排序为O(n log n)。您可以在O(n)时间内找到最高值。这还将创建列表的临时副本,以便为临时操作使用大量额外内存。使用ux.maxBy()会更有效
var x = _.maxBy(ob, (e) => { return e.lottery.jackpotAmount; });
return x.id;
这些函数用于列表。要获取键而不是项,需要迭代键
var keys = Object.keys(ob);
return _.maxBy(keys, (e) => { return ob[e].lottery.jackpotAmount; });
注意,这并不能完全解决效率问题。根据javascript引擎的不同,需要keys数组和ob[e]查找的开销会将空间使用率降低到O(n),并且可能会导致O(n log n)的复杂性
如果你的目标是一个现代的JS引擎,你可以使用Map对象和手写搜索来获得固定的空间和线性时间搜索
const getMax = function (map) {
let maxValue = null;
let maxKey = null;
map.forEach((value, key) => {
if (value.lottery.jackpotAmount > maxValue) {
maxValue = value.lottery.jackpotAmount;
maxKey = key;
}
});
return maxKey;
};
这是一个例子
干杯好主意。只是一个小的更正-您需要使用
.minBy()
,因为\uu.min()
不接受回调。此外,由于用户需要最高的jackpotAmount
值(排序是降序的),请使用.maxBy()
。它使用.max()
工作@奥里德罗里——啊,对不起,接得好。我想到的是下划线min(),而不是lodash min()。我已经更新了答案中的代码。@Mowzer-它之所以有效,是因为在['alpha','bravo','charlie']
数组中,charlie
的值最高。回调被忽略。将alpha
更改为delta
,然后查看发生了什么。这将起作用var x=uu.maxBy(key,(e)=>ob[e].lotking.jackpot金额)代码>
const getMax = function (map) {
let maxValue = null;
let maxKey = null;
map.forEach((value, key) => {
if (value.lottery.jackpotAmount > maxValue) {
maxValue = value.lottery.jackpotAmount;
maxKey = key;
}
});
return maxKey;
};