2017-07-18 90 views
0

我有以下包含json数据的对象。js(nodeJS)解析基于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))我希望获得“实际”价格,然后获得阵列内所有商品的最高价格。

回答

0

使用下面的代码,您可以找到项目的最大值和当前价格。我认为这个代码可以更好地优化,因为我循环了两次。

演示: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]) 
+0

我只需要最高的价格从“实际”日期,以上示例将意味着像'价格最高输出:642'。希望你能理解? – seikzer

+0

实际日期是什么意思?所以你不需要价格项目明智吗?\ – Vineesh

+0

我只需要从我使用实际日期的if条件过滤的所有项目中获得“最高”价格(只有最高价格)。对于上面的exmaple代码将是642.只记下最新的价格。 – seikzer