我有一个很长的词典,有许多条目{y:10, au:41, w:41, m:11, u:21, t:1, d:1}
我需要的是获得数组中最低值的所有键。我发现了这个(Getting key with the highest value from object),但这不适用于多个最小值(最大值)
我只需要使用核心JavaScript。
最快和最简单的可能是使用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]]; });
这是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>');