如何过滤多维 JSON 对象

Posted

技术标签:

【中文标题】如何过滤多维 JSON 对象【英文标题】:How to filter a multidimentional JSON Object 【发布时间】:2017-12-06 02:59:42 【问题描述】:

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

然后我按以下格式提取我需要的内容

json['product1'][0].name

但是,我想根据另一个元素的值从每个 json 对象中获取一个元素数组。目前我正在使用:

for each (var row:Object in json) 

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


这是一个好方法吗?我问是因为我似乎每次都在遍历整个 json 对象。

【问题讨论】:

您可以缓存搜索结果。或者,可以通过一次传递数据来预缓存搜索结果以索引所有过滤器值和相关数组。但否则你做对了,没有任何技巧或隐藏的秘密。 【参考方案1】:

如果我正确理解了您的问题,听起来您想使用.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'

这显然是一个基本示例,但相同的概念将适用于您问题中适用的精确属性。希望这会有所帮助。

【讨论】:

以上是关于如何过滤多维 JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Angular 中为嵌套的 JSON 对象使用搜索过滤器?

如何过滤多维 JavaScript 数组

如何使用 javascript 过滤复杂的 json 对象?

如何在mongodb的单个json文档中过滤对象数组? [复制]

如何仅从一个键中过滤对象并将其作为 json 返回?

如何使用 jq 按元素属性值过滤对象数组?