我有一个json对象数组。我想要搜索数组,并为每个对象创建一个'services‘列表,该列表是一个逗号分隔的列表,其中包含所有值为"yes“的键。然后,使用jquery的each以html格式显示带有服务列表的json对象列表。
这是一个很大的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",
},
];
发布于 2011-06-15 01:02:53
首先,删除尾随的逗号。by浏览器真的真的被它们搞糊涂了。无论如何,当您说"for each value“时,我假设您不想”搜索“数组;您希望遍历数组并将其解析为更有用的列表。我建议的第一种方法是传递你想要的数组作为你想要的数组,但是如果这不是一个选项,你要寻找的是它的一些变体,这应该是相当有效的(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>");
}
这样,您就可以向访问者显示可用的服务,并且仍然保留一个数组,以便在必要时进一步使用。
发布于 2011-06-15 01:20:51
如果您只想过滤数组,那么可以使用grep。
grep -查找满足过滤函数的数组元素。原始数组不受影响。
http://api.jquery.com/jQuery.grep/
发布于 2011-06-15 01:02:39
jQuery.inArray()在数组中搜索指定值并返回其索引(如果未找到,则返回-1 )。
http://api.jquery.com/jQuery.inArray/
或
http://api.jquery.com/jQuery.each/
https://stackoverflow.com/questions/6347137
复制相似问题