根据每个项目中的属性值将JSON数组中的项目插入新变量中?

时间:2016-08-18 23:23:00

标签: javascript jquery json

基于下面的JSON数组,我需要根据每个项目的category属性将其拆分为单独的JSON数组。

因此,类别属性设置为person的所有项目都将被提取出来并保存到一个新变量中,该变量只包含category项目的新JSON数组。

然后我需要为使用JavaScript或jQuery找到的每个类别执行此操作。

以下示例数据有3个不同的类别值:

  • 地址

代码:

var mock_data_types =  [ 
    {
        "type":"first_name",
        "name":"First Name1",
        "description": "Random generated First Name",
        "example":"Jason",
        "category":"person"
    },
    {
        "type": "last_name",
        "name": "Last Name2",
        "description": "Random generated Last Name",
        "example": "Davis",
        "category": "address"
    },
    {
        "type": "domain",
        "name": "Domain Name3",
        "description": "Random generated WWW Domain Name",
        "example": "google.com",
        "category": "it"
    },
    {
        "type": "Gender",
        "name": "Gender4",
        "description": "Random generated Gender Type",
        "example": "Female",
        "category": "person"
    },
    {
        "type": "first_name",
        "name": "First Name5",
        "description": "Random generated First Name",
        "example": "Jason",
        "category": "person"
    },
    {
        "type": "last_name",
        "name": "Last Name6",
        "description": "Random generated Last Name",
        "example": "Davis",
        "category": "address"
    },
    {
        "type": "domain",
        "name": "Domain Name7",
        "description": "Random generated WWW Domain Name",
        "example": "google.com",
        "category": "person"
    },
    {
        "type": "Gender",
        "name": "Gender8",
        "description": "Random generated Gender Type",
        "example": "Female",
        "category": "address"
    },
    {
        "type": "first_name",
        "name": "First Name9",
        "description": "Random generated First Name",
        "example": "Jason",
        "category": "it"
    },
    {
        "type": "last_name",
        "name": "Last Name10",
        "description": "Random generated Last Name",
        "example": "Davis",
        "category": "person"
    },
    {
        "type": "domain",
        "name": "Domain Name11",
        "description": "Random generated WWW Domain Name",
        "example": "google.com",
        "category": "it"
    },
    {
        "type": "Gender",
        "name": "Gender12",
        "description": "Random generated Gender Type",
        "example": "Female",
        "category": "person"
    },
    {
        "type": "first_name",
        "name": "First Name13",
        "description": "Random generated First Name",
        "example": "Jason",
        "category": "address"
    },
    {
        "type": "last_name",
        "name": "Last Name14",
        "description": "Random generated Last Name",
        "example": "Davis",
        "category": "person"
    },
    {
        "type": "domain",
        "name": "Domain Name15",
        "description": "Random generated WWW Domain Name",
        "example": "google.com",
        "category": "it"
    },
    {
        "type": "Gender",
        "name": "Gender16",
        "description": "Random generated Gender Type",
        "example": "Female",
        "category": "person"
    },
];

3 个答案:

答案 0 :(得分:2)

这是一个简单的javascript解决方案,不使用任何库

var dt = {};
for(var a=0;a<mock_data_types.length;a++) {
    if(dt[mock_data_types[a].category]){
        dt[mock_data_types[a].category].push(mock_data_types[a])
    }else{
        dt[mock_data_types[a].category] = [mock_data_types[a]];
    }

}

答案 1 :(得分:2)

Array.prototype.reduce

这是一项非常简单的工作

var mock_data_types =  [{"type":"first_name","name":"First Name1","description":"Random generated First Name","example":"Jason","category":"person"},{"type":"last_name","name":"Last Name2","description":"Random generated Last Name","example":"Davis","category":"address"},{"type":"domain","name":"Domain Name3","description":"Random generated WWW Domain Name","example":"google.com","category":"it"},{"type":"Gender","name":"Gender4","description":"Random generated Gender Type","example":"Female","category":"person"},{"type":"first_name","name":"First Name5","description":"Random generated First Name","example":"Jason","category":"person"},{"type":"last_name","name":"Last Name6","description":"Random generated Last Name","example":"Davis","category":"address"},{"type":"domain","name":"Domain Name7","description":"Random generated WWW Domain Name","example":"google.com","category":"person"},{"type":"Gender","name":"Gender8","description":"Random generated Gender Type","example":"Female","category":"address"},{"type":"first_name","name":"First Name9","description":"Random generated First Name","example":"Jason","category":"it"},{"type":"last_name","name":"Last Name10","description":"Random generated Last Name","example":"Davis","category":"person"},{"type":"domain","name":"Domain Name11","description":"Random generated WWW Domain Name","example":"google.com","category":"it"},{"type":"Gender","name":"Gender12","description":"Random generated Gender Type","example":"Female","category":"person"},{"type":"first_name","name":"First Name13","description":"Random generated First Name","example":"Jason","category":"address"},{"type":"last_name","name":"Last Name14","description":"Random generated Last Name","example":"Davis","category":"person"},{"type":"domain","name":"Domain Name15","description":"Random generated WWW Domain Name","example":"google.com","category":"it"},{"type":"Gender","name":"Gender16","description":"Random generated Gender Type","example":"Female","category":"person"}];

var categories = mock_data_types.reduce((categories, dataType) => {
    categories[dataType.category] = categories[dataType.category] || [];
    categories[dataType.category].push(dataType);
    return categories;
}, {});

document.write('<pre>' + JSON.stringify(categories, null, '  ') + '</pre>');

答案 2 :(得分:0)

如果您不喜欢使用图书馆,我会告诉您获取underscore。使用where函数,您可以执行以下操作来完成结果。

_.where(mock_data_types, {'category': 'person'});

我还希望你可以通过提取数据来增加复杂性并添加任意数量的属性,例如:

_.where(mock_data_types, {'category': 'person', 'type': 'first_name'});