我有一个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/