Javascript 无法读取未定义的属性“x”。json文件中的第二级

Javascript 无法读取未定义的属性“x”。json文件中的第二级,javascript,json,Javascript,Json,问题:由于某种原因,无法在JSON文件中呈现第二级,但第一级可以工作。第二级是给我未定义的错误。请帮忙 HTML: 示例:数组中的第一项没有促销字段。这将抛出未定义的错误。在尝试访问该字段或创建默认值之前,请检查该字段是否存在 检查 违约 此外,还应该将循环结构更改为a for var i=0;i

问题:由于某种原因,无法在JSON文件中呈现第二级,但第一级可以工作。第二级是给我未定义的错误。请帮忙

HTML:


示例:

数组中的第一项没有促销字段。这将抛出未定义的错误。在尝试访问该字段或创建默认值之前,请检查该字段是否存在

检查 违约 此外,还应该将循环结构更改为a for var i=0;i 未捕获的TypeError:无法使用“in”运算符在4中搜索“getAttribute”


工作小提琴-

除了不是数据中的所有对象都具有完全相同的数据结构之外,我还将更改for循环中的for。。。在模式中转换为迭代变量,因为您是在数组上迭代,而不是在javascript对象上枚举。换言之:

for(var e=0; e < items.length; e++)


这里有一些关于为什么不使用的更多信息。。。在数组模式中:

请在问题中提供问题/JSON/代码的示例我创建了一个JSFIDLE,并创建了问题。使用HTML、JSON和JS。请在您的问题中包括JSON/JS,而不仅仅是JSFIDLE。JSFIDLE可以包含一个更完整的示例,但您的问题可以提供一个代码和JSON的简化示例。我希望这就是你的意思。谢谢您的第一项没有促销会员。如果查看调试器,它很可能会告诉您var promoPriceValue=item.Promo.Price抛出错误,因为item.Promo未定义,请尝试item.Promo?item.Promo.Price:“无促销”。请记住调试器是您的朋友。这是一个很好的链接,可以解释for…in问题+1thanks@Jason..我已经尝试过这个方法,如果所有JSON都有相同的字段,它就可以完美地工作。例如,数组中的第一项没有“Promo”,直到我在第一个字段中添加了“Promo”,您的方法才起作用。谢谢,我会再次检查
var data = [
    {
        "word": "hello",
        "favnumber": "0070",
        "item": "item1",
        "color": "red"
   },
   {
        "word": "hello world",
        "favnumber": "0233070",
        "item": "item2",
        "color": "blue",
       "Promo": {
            "Price": 3.99
        }
   },
   {
        "word": "hello mom",
        "favnumber": "0070",
        "item": "item3",
        "color": "pink",
       "Promo": {
            "Price": 4.99
        }
   },
   {
        "word": "hello dad",
        "favnumber": "0070",
        "item": "item4",
        "color": "silver",
        "Promo": {
            "Price": 8.99
        }
   }    
];

var items = document.querySelectorAll('[data-item]');

for (var e in items) {
    var element = items[e];
    var name = $(element).attr('data-item');

    for (var i in data) {
        var item = data[i];

        if (name == item.item) {
            var colorValue = item.color
            var promoPriceValue = item.Promo.Price //this doesn't work//
            $(element).find('p').text(colorValue)//this works//
            $(element).find('span').text(promoPriceValue)
        }
    }
}
if(item.Promo) {
    var promoPriceValue = item.Promo.Price
}
var promoPriceValue = item.Promo ? item.Promo.Price : 10.99
for(var e=0; e < items.length; e++)
for(var i=0; i < data.length; i++)