【问题标题】:js (nodeJS) parsing JSON based object (string as identifier)js(nodeJS)解析基于JSON的对象(字符串作为标识符)
【发布时间】:2017-07-18 05:13:35
【问题描述】:

我有以下包含 json 数据的对象。

{
    "item1": {
        "2017-07-17": {"price": 67},
        "2016-07-16": {"price": 453},
        "2016-07-15": {"price": 435},
        ...
    },
    "item2": {
        "2017-07-17": {"price": 642},
        "2016-07-16": {"price": 643},
        "2016-07-15": {"price": 593},
        ...
    },
    ...
}

为了解析这段代码,我使用:

highest_price = Infinity;
for (var item in prices) {

  if(keys.includes(item)){

    console.log(item + " found");

  }
}

我现在如何才能获得仅“今天”的“最高”价格? if 语句确保我只获得“相关”项目,但我如何访问“当前”价格并确保最终我获得过滤通过的所有项目的最高价格。 我的主要问题是如何“仅获取”当前日期属性?

我循环每个项目,然后检查项目名称是否在数组中。对于此数组if(keys.includes(item)) 中的每个项目,我想获得“实际”价格,然后获得数组内所有项目的最高价格。

【问题讨论】:

    标签: javascript json node.js string object


    【解决方案1】:

    使用下面的代码,您可以找到商品的最高价格和当前价格。我认为这段代码可以优化得更好,因为我循环了两次。

    演示:https://jsfiddle.net/vineeshmp/3afz92yr/2/

    var prices = {
        "item1": {
            "2017-07-17": {"price": 800},
            "2016-07-16": {"price": 453},
            "2017-07-19": {"price": 10},
            "2016-07-15": {"price": 435}
        },
        "item2": {
            "2017-07-17": {"price": 622},
            "2016-07-16": {"price": 643},
            "2016-07-15": {"price": 593}
    
        }
    };
    var items = Object.keys(prices);
    var dateprices = {};
    items.forEach(function(item){
      if(keys.includes(item)){
          for(var k in prices[item]){
            dateprices[k] = dateprices.hasOwnProperty(k)?dateprices[k]:[];
            dateprices[k].push(prices[item][k].price);        
          }    
      }
    })
    
    Object.entries(dateprices).forEach(function([key, value]){
        console.log(key);
      dateprices[key].sort(function(a,b){
         return b - a;
      });   
    })
    alert("Highest price on 2017-07-17 is "+dateprices["2017-07-17"][0])
    

    【讨论】:

    • 我只需要“实际”日期的最高价格,对于上面的示例,这意味着像highest price: 642 这样的输出。希望你明白吗?
    • 实际日期是什么意思?所以你不需要明智的价格项目吗?\
    • 我只需要从我使用实际日期的 if 条件过滤的所有项目中获取“最高”价格(只有最高价格)。对于上面的示例代码,这将是 642。只注意最新价格。
    • 非常感谢,但是如何包含我的支票if(keys.includes(item)),所以只包含定义的对象?
    猜你喜欢
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多