json-jquery过滤器javascript数组



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

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

我已经通过jQuery的each(即obj.name)访问了对象的属性--因此,我认为应该可以使用jQuery的筛选器,如果值为yes,则显示该键。

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

我不确定哪一个会更快,而且到目前为止在这两个方面都不太成功。。。所以任何建议和例子都会很有帮助。

json数组如下所示:

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

如果您只想过滤数组,那么就使用grep。

grep-查找满足筛选函数的数组元素。原始数组不受影响

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

首先,删除尾部逗号。Internet Explorer真的非常困惑。不管怎样,我假设当你说"for each value"时,你不想"搜索"数组;您希望对数组进行迭代,并将其解析为一个更可用的列表。我建议的第一种方法是将你想要的作为你想要的数组传递,但如果这不是一种选择,你要寻找的是它的一些变体,它应该相当有效(jsFiddle示例):

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>");
}

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

jQuery.inArray()在数组中搜索指定值并返回其索引(如果未找到,则返回-1)。

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

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

最新更新