【问题标题】:json jquery filter javascript arrayjson jquery 过滤器 javascript 数组
【发布时间】:2011-09-14 21:13:27
【问题描述】:

我有一个 json 对象数组。我想搜索数组并为每个对象创建一个“服务”列表,该列表是以逗号分隔的所有值为“是”的键的列表。 然后使用 jquery 的 each 将带有服务列表的 json 对象列表显示在 html 中。

它是一个很大的 json 文件,所以我想尽可能高效地完成它。

我已经通过 jQuery 的 each 访问了对象的属性(即 obj.name) - 所以我认为应该可以过滤为每个对象列出的服务使用 jQuery的过滤器,如果值为yes则显示key。

但似乎更有效的选择可能是创建一个新的 javascript 数组,以 yes 值加入服务,然后将该变量添加到 html 中 附加。

我不确定哪个会更快,而且到目前为止都没有非常成功......所以任何建议和示例都会非常有帮助。

下面是 json 数组的样子:

[
 {"name":"name1",
  "service1":"y",
  "service2":"y",
  "service3":"n",
 },

 {"name":"name2",
  "service1":"n",
  "service2":"y",
  "service3":"n",
 },
];

【问题讨论】:

    标签: javascript jquery arrays json filter


    【解决方案1】:

    如果您只想过滤数组,请使用 grep。

    grep - 查找数组中满足过滤功能的元素。原数组不受影响。

    http://api.jquery.com/jQuery.grep/

    【讨论】:

      【解决方案2】:

      首先,删除尾随逗号。 Internet Explorer 真的被他们弄糊涂了。无论如何,当你说“每个值”时,我假设你不想“搜索”数组;您想遍历数组并将其解析为更可用的列表。我建议的第一种方法只是将你想要的作为你想要的数组传递,但如果这不是一个选项,你正在寻找的是这个的一些变体,它应该是相当有效的(jsFiddle example):

      var json = [
        {"name":"name1", "service1":"y", "service2":"y", "service3":"n"},
        {"name":"name2", "service1":"n", "service2":"y", "service3":"n"}
      ];
      var parsed = {};
      
      for (var i = 0, iLen = json.length; i < iLen; i++) {
        // Assuming all we need are the name and a list
        var name;
        var list = [];
      
        for (var key in json[i]) {
          var value = json[i][key];
      
          // We need to hold on to the name or any services with value "y"        
          if (key === "name") {
            name = value;
          } else if (value === "y") {
            list.push(key);
          }
        }
      
        // Add them to the parsed array however you'd like
        // I'm assuming you want to just list them in plain text
        parsed[name] = list.join(", ");
      }
      
      // List them on the web page
      for (var key in parsed) {
        document.write(key + ": " + parsed[key] + "<br>");
      }
      

      这样一来,您就可以向访问者展示可用的服务,并在必要时保留一个数组以供进一步使用。

      【讨论】:

      • 完美 - 谢谢你!是的,我的意思是迭代和解析而不是搜索...非常感谢!
      【解决方案3】:

      jQuery.inArray() 在数组中搜索一个指定的值并返回它的索引(如果没有找到则返回-1)。

      http://api.jquery.com/jQuery.inArray/

      或者

      http://api.jquery.com/jQuery.each/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-13
        • 1970-01-01
        • 2014-02-05
        • 2019-10-07
        • 1970-01-01
        • 2023-03-08
        相关资源
        最近更新 更多