通过嵌套JavaScript数组循环问题

时间:2017-08-27 06:01:06

标签: javascript jquery json foreach

我遇到问题循环嵌套JavaScript数组并需要一些帮助。我试图返回一组包含属性名称和值的列表项,但它返回为undefined。任何帮助都会非常感激,因为这是一个重要的项目。

的JavaScript

$.getJSON("item-data.json", function(results) {
        $.each(results.CatalogEntryView, function(index, item) {
            console.dir(item.ItemDescription[0].features);

            document.getElementById("productHighlightsList").innerHTML = item.ItemDescription[0].features.forEach(enumerateProperties)

function enumerateProperties(key, val)
        {
            return "<li>" + key + val + "</li>"
        }

        });
    });

console.dir(item.ItemDescription[0].features);的控制台输出如下所示,显示了我尝试访问的嵌套数据结构:

enter image description here

2 个答案:

答案 0 :(得分:1)

由于你正在使用jQuery,你可以再次使用它们来嵌套数组:

$.getJSON("item-data.json", function(results) {
    $.each(results.CatalogEntryView, function(index, item) {
        $.each(item.ItemDescription[0].features, function(k,v){
            $("#productHighlightsList").append("<li>" + k + v + "</li>");
        });
    });
});

为了我们可以测试这个,我们必须说明我们有你的json:

var results = {
    'CatalogEntryView': [
        {
            'ItemDescription': [
                {
                    'features': {
                        '0': '<strong>A</strong>',
                        '1': '<strong>B</strong>',
                        '2': '<strong>C</strong>',
                        '3': '<strong>D</strong>',
                        '4': '<strong>E</strong>',
                        '5': '<strong>F</strong>',
                        '6': '<strong>G</strong>'
                    }
                }
            ]
        }
    ]
};

$.each(results.CatalogEntryView, function(index, item) {
    $.each(item.ItemDescription[0].features, function(k,v){
        $("#productHighlightsList").append("<li>" + k + v + "</li>");
    });
});

CodePen的工作测试:https://codepen.io/skunkbad/pen/OjoBNb

答案 1 :(得分:1)

Array.forEach函数不会累积数组元素。您可以使用Array.reduce函数附加所有列表项,并使用Array.map在每个项目周围包含<li>标记:

$.getJSON("item-data.json", function(results) {
    $.each(results.CatalogEntryView, function(index, item) {
        console.dir(item.ItemDescription[0].features);

        document.getElementById("productHighlightsList").innerHTML = item.ItemDescription[0].features.map(function(item){
            return "<li>" + item + "</li>";
        }).reduce(function(accumulator , item) {
            return accumulator + item;
        });
    });
});