javascript - 在 JavaScript 中查找 2 个 JSON 数组之间的匹配 JSON 项目,并将 CSS 应用于 UL 列表中的匹配项目

标签 javascript jquery json

使用 JavaScript,我需要获取标签项的 JSON 数组,并从该 JSON 数据生成所有标签的 HTML UL 列表。

接下来,我有第二个标签 JSON 数据集,我需要在其中查看第一个标签 JSON 数据并找到 2 组标签之间的每个匹配项。

当第一个标签 JSON 数据集中存在第 2ns JSON 数据集中的标签时,我需要将 CSS 类添加到我根据每个匹配标签上的第一个标签数据生成的 UL 列表

第一个 JSON 标签数据集

var allTagsJson = [{
    "id": "1",
    "name": "Tag 1"
}, {
    "id": "2",
    "name": "Tag 2"
}, {
    "id": "3",
    "name": "Tag 3"
}, {
    "id": "4",
    "name": "Tag 4"
}, {
    "id": "5",
    "name": "Tag 5"
}];

第二个 JSON 标签数据集

    "id": "1",
    "name": "Tag 1"
}, {
    "id": "4",
    "name": "Tag 4"
}, {
    "id": "5",
    "name": "Tag 5"
}];

因此,在此示例数据中,我的 UL 列表将包含:

  • 标签 1
  • 标签 2
  • 标签 3
  • 标签 4
  • 标签 5

由于第二个 JSON 数据集具有标签 1、4 和 5。上面的列表需要将 CSS 类 active 添加到标签 1、4 和 5

JSFiddle 玩:https://jsfiddle.net/jasondavis/tm9fsyvb/

var listTagsJson = [{

// generate 2 UL lists from JSON Data
$(function() {
    var allTagsHtml = '';

    // this list needs to add CSS class active to each item that has a matching tag in the 2nd list of tags
    $.each(allTagsJson, function(index, val) {
        console.log(val.name);
        allTagsHtml += " <li><a href='#" + val.name + "'>" + val.name + "</a></li>";
        $('#all-tags').html(allTagsHtml);
    });

    var listTagsHtml = '';
    $.each(listTagsJson, function(index, val) {
        console.log(val.name);
        listTagsHtml += " <li><a href='#" + val.name + "'>" + val.name + "</a></li>";
        $('#list-tags').html(listTagsHtml);
    });

});

最佳答案

假设 ID 只是需要比较的属性...从第二个数组开始,在迭代时将每个 id 作为键存储在 hashmap 对象中,然后在迭代第一个数组时检查它是否存在并相应地添加类

$(function() {
  // id object
  var listIds = {}

  var listTagsHtml = '';
  $.each(listTagsJson, function(index, val) {
    // add id to object
    listIds[val.id] = true;
    listTagsHtml += " <li><a href='#" + val.name + "'>" + val.name + "</a></li>";
  });

  var allTagsHtml = '';
  $.each(allTagsJson, function(index, val) { 
    // apply class based on id object
    var className = listIds[val.id] ? 'match' : '';
    allTagsHtml += " <li class='" + className + "'><a href='#" + val.name + "'>" + val.name + "</a></li>";
  });

  // note these don't belong inside the loops when using html string concatenation
  $('#all-tags').html(allTagsHtml);
  $('#list-tags').html(listTagsHtml);

});

这种方法不需要额外的 dom 搜索或数组过滤,并且非常高效

DEMO

关于javascript - 在 JavaScript 中查找 2 个 JSON 数组之间的匹配 JSON 项目,并将 CSS 应用于 UL 列表中的匹配项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40581774/

相关文章:

JavaScript 数组和循环

jquery - iOS 和 OSX 上的强制网络助手上的 Ajax

jquery - 我使用 sb admin2,但我不知道侧边栏由于 metis 菜单而无法工作

javascript - 仅使用 json 对象进行通信的 WebApp?

jquery - 如何通过 Windows 服务上托管的 WCF 服务在网站上显示数据(并刷新数据)

javascript - Aptana Eclipse 插件和 Dojo 自动完成

javascript - Firebug console.log 中的结果被 chop

json - Angular2 http 获取 json 问题

javascript - 我的移动网站右侧有烦人的空白

javascript - 上一张幻灯片和自动播放 Jquery slider ,