【问题标题】:JSON arrays, two properties matchingJSON数组,两个属性匹配
【发布时间】:2014-03-18 11:28:02
【问题描述】:

我需要解析这个 JSON 数据:

var myjson = {        
{"groups":[
    {"id":1,"title":"Title1"},
    {"id":2,"title":"Title2"},
    {"id":3,"title":"Title3"}
    ],
        "dials":[
    {"title":"Link1","url":"url1","idgroup":1},
    {"title":"Link2","url":"url2","idgroup":2},
    {"title":"Link3","url":"url3","idgroup":3},
    {"title":"Link4","url":"url4","idgroup":1},
    {"title":"Link5","url":"url5","idgroup":2},
    {"title":"Link6","url":"url6","idgroup":3}
    ]}
};

我需要构建一个引导手风琴,在“组”中使用“拨号”,其中dials.idgroup 匹配groups.id

解析“组”没有问题;为了构建手风琴标记,我使用:

$.each(myjson.groups, function (i, group) {
        $grID = group.id;
        $grTitre = group.title;
        $constrAccordion = '<div class="panel panel-default"><div class="panel-heading"><h4 class="panel-title"><a data-toggle="collapse" data-parent="#accordion" href="#' + $grID + '">' + $grTitre + '</a></h4></div>  <div id="' + $grID + '" class="panel-collapse collapse"><ul class="list-group"></ul></div></div>';
        $('#liens #accordion').append($constrAccordion);
        //  #liens #accordion is my empty markup in my html file.
});

但我无法解析拨号。我试过 $.grep:

makeSpGroup = $.grep(myjson.dials, function (element, index) {
    return element.idgroup === $grID;
});

【问题讨论】:

  • 你可以使用 parseJSON(myjson) 可能是或看到link
  • 我已经看过这个问题,它没有解释如何匹配来自两个不同数组的两个属性。
  • @elektrorl 您可以查看我的确切解决方案的答案

标签: jquery json multidimensional-array


【解决方案1】:

你可以用下面的代码做到这一点;

$.each(myjson.groups, function (i, group) {
    var html = '';
    var makeSpGroup = $.grep(myjson.dials, function (element, index) {
        if (element.idgroup == group.id) {
            html += '<li><a href="' + element.url + '">' + element.title + '</a>';
        }
    });

        $grID = group.id;
        $grPosition = group.position;
        $grTitre = group.title;
        $constrAccordion = '<div class="panel panel-default"><div class="panel-heading"><h4 class="panel-title"><a data-toggle="collapse" data-parent="#accordion" href="#' + $grID + '">' + $grTitre + '</a></h4></div>  <div id="' + $grID + '" class="panel-collapse collapse"><ul class="list-group">' + html + '</ul></div></div>';
        $('#result').append($constrAccordion);
        //  #liens #accordion is my empty markup in my html file.
});

这是一个工作演示:http://jsfiddle.net/snE8y/1/

【讨论】:

  • 哇,谢谢!我试了整个晚上!现在看起来很简单。我尝试使用 if (element.idgroup == group.id) 工作的变量。
  • 如果我的问题可行的话,我的问题是可以接受的:)不客气
【解决方案2】:

看看你能不能这样做:

var arr = []; // declare an array outside to be accessible in grep func

$.each(myjson.groups, function (i, group) {
    arr.push(group.id); // add this line
    .......
});

然后以这种方式稍微更改您的 grep 函数:

makeSpGroup = $.grep(myjson.dials, function (element, index) {
    return $.inArray(arr, element.idgroup); // returns the elem
});

Demo Fiddle

【讨论】:

  • 是的,好的,这是一个旧的复制/粘贴错误……不是这里的问题,但谢谢。我编辑了我的问题。
  • 哦!好的,你能告诉我$grID是什么吗?是否声明为数组。
  • $grID = group.id;但我不知道是否允许在 $.grep 函数中重用它。
  • @elektrorl 它不应该以这种方式使用,尽管我建议您使用带有小 var 插件的小提琴来更新答案。
  • @elektrorl 我为你创建了一个演示小提琴。你可以看到我建议的答案是有效的。
猜你喜欢
  • 2014-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-11
  • 1970-01-01
相关资源
最近更新 更多