Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Lodash中获取排序属性的键_Javascript_Lodash - Fatal编程技术网

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