2011-06-14 105 views
1

我有一个json对象数组。我想要搜索数组和每个对象,创建一个“服务”列表,这是一个逗号分隔的所有键值为“是”的列表。 然后使用jquery的每个html显示带有服务列表的json对象列表。json jquery过滤javascript数组

它是一个大的json文件,所以我想尽可能有效地做到这一点。

我已经有了对象的属性正在通过jQuery的访问的每一个(即obj.name) - 所以我想应该是可以过滤使用 jQuery的过滤器的每个对象列出的服务,然后显示键如果该值为是。

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

林不知道哪个会更快,迄今还没有非常成功,所以任何建议和例子将是非常有益的。

这里的JSON数组的样子:

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

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

回答

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

通过这种方式,您可以显示访问者所提供的服务,并在必要时仍然保留阵列以供进一步使用。

+0

完美 - 感谢ü!是的,我的意思是迭代和解析,而不是搜索...非常感谢! – sharpiemarker1 2011-06-14 17:21:03