【问题标题】:How to get element from nested JSON Array object with max value如何从具有最大值的嵌套 JSON 数组对象中获取元素
【发布时间】:2020-03-21 22:03:20
【问题描述】:

我想要类别 1 的最大值 157。我可以通过使用 for 或 forEach 来实现这一点。但是谁能指导我如何通过使用 ES6 来实现这一点?

我还想要完整的对象,这样我也可以使用其他字段。例如。到期

{
                "data": [
                    {
                        "expiry": "2020-01-01T00:00:00",
                        "rates": [
                            {
                                "name": "Category 1",
                                "amount": 57
                            },
                            {
                                "name": "Category 2",
                                "amount": 55
                            }
                        ]
                    },
                    {
                        "expiry": "2020-01-01T00:00:00",
                        "rates": [
                            {
                                "name": "Category 1",
                                "amount": 157
                            },
                            {
                                "name": "Category 2",
                                "amount": 25
                            }
                        ]
                    },
                    {
                        "expiry": "2020-01-01T00:00:00",
                        "rates": [
                            {
                                "name": "Category 1",
                                "amount": 27
                            },
                            {
                                "name": "Category 2",
                                "amount": 45
                            }
                        ]
                    },
                ]
            };

【问题讨论】:

    标签: javascript arrays json ecmascript-6


    【解决方案1】:

    试试这个:

    var jsonObj = {
    	"data": [{
    			"expiry": "2020-01-01T00:00:00",
    			"rates": [{
    					"name": "Category 1",
    					"amount": 57
    				},
    				{
    					"name": "Category 2",
    					"amount": 55
    				}
    			]
    		},
    		{
    			"expiry": "2020-01-01T00:00:00",
    			"rates": [{
    					"name": "Category 1",
    					"amount": 157
    				},
    				{
    					"name": "Category 2",
    					"amount": 25
    				}
    			]
    		},
    		{
    			"expiry": "2020-01-01T00:00:00",
    			"rates": [{
    					"name": "Category 1",
    					"amount": 27
    				},
    				{
    					"name": "Category 2",
    					"amount": 45
    				}
    			]
    		}
    	]
    };
    
    var arr = [];
    
    for (var i of jsonObj.data) {
    	arr.push(i.rates.find((obj) => obj.name === 'Category 1'));
    }
    
    var maxValue = Math.max.apply(Math, arr.map(function(obj) { return obj.amount; }));
    
    console.log(maxValue); // 157

    【讨论】:

    • 我可以使用 for 循环做同样的事情,但我想使用 es6 - es10。谢谢你的答复。我不想使用 for 循环。
    【解决方案2】:

    试试看

    var jsonData= {
    	"data": [{
    			"expiry": "2020-01-01T00:00:00",
    			"rates": [{
    					"name": "Category 1",
    					"amount": 57
    				},
    				{
    					"name": "Category 2",
    					"amount": 55
    				}
    			]
    		},
    		{
    			"expiry": "2020-01-01T00:00:00",
    			"rates": [{
    					"name": "Category 1",
    					"amount": 157
    				},
    				{
    					"name": "Category 2",
    					"amount": 25
    				}
    			]
    		},
    		{
    			"expiry": "2020-01-01T00:00:00",
    			"rates": [{
    					"name": "Category 1",
    					"amount": 27
    				},
    				{
    					"name": "Category 2",
    					"amount": 45
    				}
    			]
    		}
    	]
    };
    
    var vAllAmountForCategory1=[];
    
    for (i = 0; i < jsonData.data.length; i++) {
     var pData= jsonData.data[i];
     for (j = 0; j < jsonData.data[i].rates.length; j++) {	
       if(jsonData.data[i].rates[j].name=="Category 1"){
        vAllAmountForCategory1.push(jsonData.data[i].rates[j].amount);
        }
      }
    }
    
    var vValueAmountSortingInDesc=vAllAmountForCategory1.sort(function(a, b){return b - 
     a});
    
    console.log("The max amount for 'Category 1' is:  "+vValueAmountSortingInDesc[0]);

    **或者你也可以使用**LinkJS

    【讨论】:

    • 我可以使用 for 循环做同样的事情,但我想使用 es6 - es10。谢谢你的答复。我不想使用 for 循环。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 2019-05-08
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多