从字典javascript获取所有最小值

问题描述 投票:3回答:2

我有一个很长的词典,有许多条目{y:10, au:41, w:41, m:11, u:21, t:1, d:1}我需要的是获得数组中最低值的所有键。我发现了这个(Getting key with the highest value from object),但这不适用于多个最小值(最大值)

我只需要使用核心JavaScript。

javascript dictionary
2个回答
4
投票

最快和最简单的可能是使用Object.keys将对象键作为数组,并根据具有最低值的项过滤该数组。 首先需要找到最低值,然后过滤,这是一种方法

var obj    = {y:10, au:41, w:41, m:11, u:21, t:1, d:1};
var keys   = Object.keys(obj);
var lowest = Math.min.apply(null, keys.map(function(x) { return obj[x]} ));
var match  = keys.filter(function(y) { return obj[y] === lowest });

document.body.innerHTML = '<pre>' +JSON.stringify(match, null, 4)+ '</pre>';

获取键,然后创建传递给Math.min.apply的值的数组,以获得对象中的最低值。

然后,只需过滤键中任何与对象中最低值匹配的内容。

这是使用sort的另一种方式

var obj   = {y:10, au:41, w:41, m:11, u:21, t:1, d:1};
var keys  = Object.keys(obj).sort(function(a,b) { return obj[a] - obj[b]; });
var match = keys.filter(function(x) { return obj[x] === obj[keys[0]]; });

1
投票

这是Array#reduce()的解决方案:

var object = { y: 10, au: 41, w: 41, m: 11, u: 21, t: 1, d: 1 },
    result = function (o) {
        var keys = Object.keys(o);
        return keys.reduce(function (r, k) {
            if (o[k] < o[r[0]]) {
                return [k];
            }
            if (o[k] === o[r[0]]) {
                r.push(k);
            }
            return r;
        }, [keys.shift()]);
    }(object);

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
© www.soinside.com 2019 - 2024. All rights reserved.