2014-10-23 2 views
-3

Привет, У меня возникла проблема с циклом прохождения массива объектов, чтобы найти наивысшее значение свойства и вернуть объект, который содержит это самое высокое значение свойства. Предположим, что у меня есть этот массив объектов:Цитирование через массив объектов в JavaScript

var eachMapping = [ { I: 1 }, 
         { w: 1, a: 1, n: 1, t: 1 }, 
         { t: 1, h: 1, i: 1, s: 1 }, 
         { w: 1, o: 1, r: 1, d: 6 } ]; 


    var largest = 0; 
     for(var i = 0; i < eachMapping.length; i++){ 
      for(prop in eachMapping){ 
       if(eachMapping[i][prop] > largest){ 
        largest = eachMapping[i][prop] 
        wantedobject = eachMapping[i]; 
       } 
      } 
    } 

    console.log(wantedobject) 

Это возвращает undefined. Я надеюсь, что для этого цикла будет возвращен { w: 1, o: 1, r: 1, d: 6 } , присвоив его wantedobject, поскольку все объекты в массиве имеют значение свойства, которое является самым высоким среди всех значений свойств в других объектах. Благодаря!

+4

'для (проп в eachMapping)' 'должны быть для (вар реквизита в eachMapping [я])'. –

+0

Или, вернее: для (prop в eachMapping [i]) правильно? –

+0

Вы можете сделать это без циклов, с 'reduce' и' Object.keys' – elclanrs

ответ

0

Некоторых основные ошибки кодирования - которые, вероятно, объясняет downvotes:

  • не инициализация wantedobject
  • не объявляя переменного цикл prop
  • непоследовательного использования запятой
  • большой ошибки не использует for(var prop in eachMapping[i])

это работает:

var eachMapping = [ { I: 1 }, 
        { w: 1, a: 1, n: 1, t: 1 }, 
        { t: 1, h: 1, i: 1, s: 1 }, 
        { w: 1, o: 1, r: 1, d: 6 } ]; 

var wantedobject = null; 
var largest = 0; 
    for(var i = 0; i < eachMapping.length; i++){ 
     for(var prop in eachMapping[i]){ 
      if(eachMapping[i][prop] > largest){ 
       largest = eachMapping[i][prop]; 
       wantedobject = eachMapping[i]; 
      } 
     } 
} 

console.log(wantedobject); 
0
var eachMapping = [ { I: 1 }, 
        { w: 1, a: 1, n: 1, t: 1 }, 
        { t: 1, h: 1, i: 1, s: 1 }, 
        { w: 1, o: 1, r: 1, d: 6 } ]; 


var largest = 0, i = 0, prop, wantedobject; 
for(; i < eachMapping.length; i++){ 
    for(prop in eachMapping[i]) {//you've missed [i], like Emil G wrote in his comment 
     if(eachMapping[i][prop] > largest){ 
      largest = eachMapping[i][prop] 
      wantedobject = eachMapping[i]; 
     } 
    } 
} 

console.log(wantedobject) 
Смежные вопросы