2017-07-02 72 views
0

我有一个包含许多json对象的Json字符串,每个json都有一个键,我使用JSON.parse将字符串放入一个对象中。如何筛选多维JSON对象

我然后提取什么,我需要在以下格式

json['product1'][0].name 

不过,我想从每个基于其他元素的值的JSON对象获得元素的数组。目前我正在使用:

for each (var row:Object in json) { 

    if (row[0][filterElement] == filterValue) { 
     arr.push(row[0][element]); 
    } 

} 

这是一个好方法吗?我问,因为我似乎每次都浏览整个json对象。

+1

您可以缓存搜索结果。或者,也许预缓存搜索结果通过传递数据一次来索引所有过滤器值和相关数组。但除此之外,你做对了,没有任何诡计或隐藏的秘密。 – Organis

回答

0

如果我正确地理解了您的问题,听起来好像您要使用.map.filter

因此,如果我们有一个对象,如...

var obj = { 
    people: [ 
     {name: 'person1'}, 
     {name: 'person2'}, 
     {name: 'person3'}, 
     {name: 'person4'}, 
    ] 
}; 

然后可以使用.map创建名称的新阵列...

var names = obj.people.map(function(person){ 
    return person.name; 
}); // ['person1', 'person2', 'person3', 'person4'] 

这个数组,你可以再上使用.filter ...

var filter = 'person2'; 
var filteredNames = obj.people.map(function(person){ 
     return person.name; 
    }).filter(function(name){ 
     return name == filter; // if true, will push name into a name into our new array 
    }); // 'person2' 

这显然是一个基本的例子,但sa我的概念将适用于你的问题适用的确切属性。希望这可以帮助。