从嵌套的json对象获取最小值

问题描述:

我有我想要的最低价格的json对象。以下是答复。从嵌套的json对象获取最小值

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

我试图从Stackoverflow一个解决方案,但它不会在个案工作。

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

请帮

+0

什么是'response'对象? –

+0

@AmreshVenugopal我粘贴在上面的json是响应 –

+2

首先,您需要使用JSON.parse – styopdev

本地JS的解决方案:

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

将您的json转换为js数组谢谢@ red-virus! – lbrutti

你有数组不反对,所以你不能使用Object.keys()。你也可以使用这样的扩展语法。

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)

你可以试试这个:使用ES2015

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)

你也可以让它在一个行:

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

你可以使用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);

 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

你或许应该解释你的答案,而不仅仅是邮政编码。 –