我有一个很长的字典,里面有很多条目{y:10, au:41, w:41, m:11, u:21, t:1, d:1}
,我需要的是获取数组中所有值最小的键。我找到了这个(Getting key with the highest value from object),但它不适用于多个最小值(最大值)
我只需要使用核心javascript。
发布于 2016-02-21 02:37:25
最快、最简单的方法可能是使用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]]; });
发布于 2016-02-21 02:47:16
这是一个使用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>');
https://stackoverflow.com/questions/35527341
复制相似问题