2016-02-20 4 views
3

У меня есть длинный словарь со многими записями {y:10, au:41, w:41, m:11, u:21, t:1, d:1} Что мне нужно - это получить все ключи с наименьшим значением в массиве. Я нашел это (Getting key with the highest value from object), но это не работает для нескольких минимумов (максимальных значений)Получение всех минимальных значений из словаря javascript

, и мне нужно использовать только основной javascript.

ответ

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>');

+1

Это является наиболее эффективным (если кто-то заботится), так как это одно проходить. – georg

Смежные вопросы