2017-02-23 1 views
1

Ich habe JSON-Objekt, von dem ich den minimalen Preis erhalten möchte. Unten ist die Antwort.Erhalten Min-Wert von einem verschachtelten JSON-Objekt

[ 
    { 
    "room": { 
     "price": 217, 
     "available": true 
    } 
    }, 
    { 
    "room": { 
     "price": 302, 
     "available": true, 
    } 
    }, 
    { 
    "room": { 
     "price": 427, 
     "available": true, 
    } 
    } 
] 

Ich habe eine Lösung aus Stackoverflow versucht, aber es wird im Falle nicht.

var arr = Object.keys(response).map(function (key) { return response[key]; }); 
    var min = Math.min.apply(null, arr); 

Bitte helfen

+0

was ist das 'response' Objekt? –

+0

@AmreshVenugopal die JSON Ich klebte oben ist die Antwort –

+2

Zuerst müssen Sie Ihre JSON zu Js-Array mit JSON.parse – styopdev

Antwort

1

nativen JS Lösung:

var t =[ { "room": { "price": 217, "available": true } }, { "room": { "price": 302, "available": true, } }, { "room": { "price": 427, "available": true, } } ] 
var min = t.map(function(el){return el.room.price}).reduce(function(el){return Math.min(el)}); 

working fiddle

+0

Dank @ red-Virus konvertieren! – lbrutti

1

Sie Array-Objekt haben nicht so können Sie nicht Object.keys() verwenden. Sie können auch die Streusyntax wie folgt verwenden.

var data = [{ 
 
    "room": { 
 
    "price": 217, 
 
    "available": true 
 
    } 
 
}, { 
 
    "room": { 
 
    "price": 302, 
 
    "available": true, 
 
    } 
 
}, { 
 
    "room": { 
 
    "price": 427, 
 
    "available": true, 
 
    } 
 
}] 
 

 
var min = Math.min(...data.map(e => e.room.price)) 
 
console.log(min)

2

Sie können dies versuchen:

let response = [ 
 
    { 
 
    "room": { 
 
     "price": 217, 
 
     "available": true 
 
    } 
 
    }, 
 
    { 
 
    "room": { 
 
     "price": 302, 
 
     "available": true, 
 
    } 
 
    }, 
 
    { 
 
    "room": { 
 
     "price": 427, 
 
     "available": true, 
 
    } 
 
    } 
 
]; 
 
let values = response.map(function(v) { 
 
    return v.room.price; 
 
}); 
 
var min = Math.min.apply(null, values); 
 
console.log(min)

ES2015 verwenden Sie es auch in einer Zeile machen:

var min = Math.min.apply(null, response.map((v) => v.room.price)); 
1

Sie können Array.protype.reduce()

var rooms = [{ 
 
    "room": { 
 
     "price": 217, 
 
     "available": true 
 
    } 
 
    }, 
 
    { 
 
    "room": { 
 
     "price": 302, 
 
     "available": true, 
 
    } 
 
    }, 
 
    { 
 
    "room": { 
 
     "price": 427, 
 
     "available": true, 
 
    } 
 
    } 
 
]; 
 
console.log(rooms.reduce((prev, curr) => prev.price > curr.price ? curr : prev).room.price);

1
 var response = [ 
      { 
       "room": { 
        "price": 217, 
        "available": true 
       } 
      }, 
      { 
       "room": { 
        "price": 302, 
        "available": true, 
       } 
      }, 
      { 
       "room": { 
        "price": 427, 
        "available": true, 
       } 
      } 
     ]; 

     debugger; 
     if (response && response.length > 0) 
     { 
      var min = response[0].room.price; 

      for (var i = 0; i < response.length; i++)   
       if (response[i].room.price < min) 
        min = response[i].room.price; 

      console.log(min); 
     } 
+0

Sie sollten vielleicht Ihre Antwort erklären, anstatt nur Postleitzahl. –

Verwandte Themen