2014-12-18 7 views

ответ

1

В одну сторону;

var maxes = {}; 
for (var i = 0; i < myarr.length; i++) 
{ 
    var item = maxes[myarr[i].key]; 
    maxes[myarr[i].key] = isNaN(item) ? myarr[i].value : Math.max(item, myarr[i].value); 
} 

for (var key in maxes) 
    alert(key + " max = " + maxes[key]); 
0

там могут быть некоторые рамки, как подчеркивание с раствором, я только петля над массив раз

var max = {} 
    , current, i 
for(i = 0; i < myarr.length;i++) { 
    current = myarr[i]; 
    // initial value 
    if(max[current.key] === undefined) { 
    max[current.key] = current.value 
    } 
    // check if value is higher 
    if(current.value > max[current.key]) { 
    max[current.key] = current.value; 
    } 
} 
console.log(max) 

Я не проверял, но это должно дать вам представление о

0

Использование Array.reduce (см MDN)

var myarr = [{key: 'A', value:900}, 
 
      {key: 'B', value:190}, 
 
      {key: 'B', value:160}, 
 
      {key: 'A', value:10} 
 
      ]; 
 
var max = myarr.reduce(function(a, b) { return b.value > a ? b : a; }); 
 

 
document.querySelector('#result').textContent = 
 
    'object with max value in myarr =>; ' + 
 
     JSON.stringify(max) + ' (value: ' + max.value + ')';
<div id="result"></div>

1
var maxNumbers = {}; 
var myarr = [ 
    {key: 'A', value:110}, 
    {key: 'B', value:190}, 
    {key: 'B', value:160}, 
    {key: 'B', value:890}, 
    {key: 'A', value:80} 
]; 

for(var i = 0; i < myarr.length; i++) { 
    maxNumbers[myarr[i].key] = maxNumbers[myarr[i].key] || myarr[i].value; 
    if (maxNumbers[myarr[i].key] < myarr[i].value) { 
     maxNumbers[myarr[i].key] = myarr[i].value 
    } 
} 
console.log(maxNumbers) //{ A: 110, B: 890 } 
+0

Не работает для отрицательных значений. – falsecrypt

+0

Теперь он работает с отрицательными значениями. – deviloperz

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