jQuery技术:使用多个字符串值查找JSON嵌套节点

我有一个需要根据两个不同参数计算价格的屏幕,主要(示例中的活动)和子项(示例中的ticketType)

以前这是做得很糟糕,所以我决定最好的选择是将价格存储在运行时填充的JSON对象中,并基于点击和更改事件

所以我制作了这种json格式,请注意你也可以改变它,而不是一成不变

{ "activities": [{ "activitycode": "TK", "desc": "Tickets", "ticketTypes": [{ "ticketcode": "G", "baseprice": 79 }, { "ticketcode": "P", "baseprice": 109 }] }, { "activitycode": "PK", "desc": "Parking", "ticketTypes": [{ "ticketcode": "BK", "baseprice": 65 }, { "ticketcode": "ESC-I", "baseprice": 40 }] }], //end activities "handlingPercent": "0.03", "shipping": "15" } 

所以,我尝试以正确的价格遍历JSON对象,就像这样

 pricing.activities.activitycode['TK'].ticketTypes.ticketcode['G'].baseprice 

但这不起作用,因为在提供我的值之前我还没有指定要去哪个数字节点

一旦我这样做,以下工作

 pricing.activities[0].ticketTypes[0].baseprice 

但我想要完成的是提供字符串/文本值,遍历父节点,然后子节点,并找到值

我想我可以做这样的$ .each迭代,但我想知道专家们先想到了什么,如果这确实是最好的办法

 $.each(pricing.activities, function(arrayID, activityData) { if(activityData.activitycode=="TK") $.each(activityData.ticketTypes, function(ticketTypeID, typeData) { if(typeData.ticketcode=="G") alert(typeData.baseprice); }); }); 

    在讨论代码之前,让我们来谈谈你的JSON数据。

    首先,我重新格式化了数据,因此我可以更轻松地遵循结构:

     { "activities": [ { "activitycode": "TK", "desc": "Tickets", "ticketTypes": [ { "ticketcode": "G", "baseprice": 79 }, { "ticketcode": "P", "baseprice": 109 } ] }, { "activitycode": "PK", "desc": "Parking", "ticketTypes": [ { "ticketcode": "BK", "baseprice": 65 }, { "ticketcode": "ESC-I", "baseprice": 40 } ] } ], "handlingPercent": "0.03", "shipping": "15" } 

    现在结构清晰了,这里有一个问题:你有一个activities数组,并且在该数组的每个元素中都有一个ticketTypes数组。

    这些数组中的项目顺序是否重要? 即它们是否用于生成必须按正确顺序排列的显示列表?

    而且,您如何访问这些arrays? 你主要是通过它们循环并对所有元素做些什么吗? 或者你使用它们来查找给定已知activitycodeticketcode单个元素 – 这就是问题末尾的嵌套$.each循环最终会做什么?

    根据这些问题的答案,您可能会更好地使用不同类型的结构。 也许是这样的:

     { "activities": { "TK": { "desc": "Tickets", "ticketTypes": { "G": { "baseprice": 79 }, "P": { "baseprice": 109 } } }, "PK": { "desc": "Parking", "ticketTypes": { "BK": { "baseprice": 65 }, "ESC-I": { "baseprice": 40 } } } }, "handlingPercent": "0.03", "shipping": "15" } 

    因为现在这段代码(我也在这里清理了缩进):

     $.each( pricing.activities, function( arrayID, activityData ) { if( activityData.activitycode=="TK" ) { $.each( activityData.ticketTypes, function( ticketTypeID, typeData ) { if( typeData.ticketcode=="G" ) alert( typeData.baseprice ); }); } }); 

    可以替换为:

     alert( pricing.activities.TK.ticketTypes.G.baseprice ); 

    和你编写的其他类似代码也会更简单。 关于这种方式唯一丢失的是保证订购activitiesticketTypes :数组有保证订单,对象没有。

    你试过$.grep()吗?

     var test = $.grep(pricing.activities, function(e){ return e.activitycode == 'TK'; }); var test2 = $.grep(test[0].ticketTypes, function(e){ return e.ticketcode == "G";}); console.log(test2[0].baseprice); 

    在这里小提琴。 这里有 $.grep() jQuery API文档

    这个问题的例子

    我不会说它比$.each()更好,但它是另一种方法,如果你是那种东西。

    需要了解更多jQuery教程分享使用多个字符串值查找JSON嵌套节点,都可以关注jQuery技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是jQuery教程分享使用多个字符串值查找JSON嵌套节点相关内容,想了解更多jQuery开发(异常处理)及jQuery教程关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/jquerytutorial/982046.html

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐