【问题标题】:Get min value from a nested json object从嵌套的 json 对象中获取最小值
【发布时间】:2017-02-23 10:38:59
【问题描述】:

我有一个 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 );

请帮忙

【问题讨论】:

  • response 对象是什么?
  • @AmreshVenugopal 我上面粘贴的json是响应
  • 首先您需要使用 JSON.parse 将您的 json 转换为 js 数组

标签: javascript json


【解决方案1】:

你可以试试这个:

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 也可以一行完成:

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

【讨论】:

    【解决方案2】:

    你有数组而不是对象,所以你不能使用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)

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:
                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);
                }
        

        【讨论】:

        • 你或许应该解释你的答案,而不仅仅是发布代码。
        【解决方案5】:

        原生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

        【讨论】:

          【解决方案6】:

          lbrutty 代码有点错误,函数总是返回第一个元素。所以有一个小修复。

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

          https://jsfiddle.net/xe0dcoym/17/

          【讨论】:

            猜你喜欢
            • 2019-05-08
            • 1970-01-01
            • 1970-01-01
            • 2020-05-10
            • 1970-01-01
            • 2020-11-09
            • 1970-01-01
            • 1970-01-01
            • 2019-07-08
            相关资源
            最近更新 更多