JavaScript - 在子数组中循环JSON数组和匹配字符串

时间:2015-04-05 09:48:43

标签: javascript json loops arrays

我有带有子数组的JSON数组,我想循环它并查找用户的用户名是否为'admin'。如果是这样,那么创建JSON数组包含属于用户'admin'的数据(区域,运动,城市等)。我不知道如何在循环中找到它然后切片。我很抱歉愚蠢的问题,但我有点失落。

这是具有我所拥有的结构的JSON数组:

[
    {
        "_id": "5520f52e2c0a22541541bde1",
        "region": {
            "_id": "551e6779d8f1afa01bd86529",
            "name": "region_name"
        },
        "user": {
            "_id": "551a938af056a7fc099879c1",
            "firstName": "John",
            "lastName": "Boo",
            "username": "admin",
            "id": "551a938af056a7fc099879c1"
        },
        "__v": 0,
        "sport": [
            {
                "_id": "551e69c6d8f1afa01bd86533",
                "name": "Running"
            }
        ],
        "city": "some_city",
        "advert": "some_advert",
        "title": "I want to run!",
        "created": "2015-04-05T08:41:18.173Z"
    },
    {
        "_id": "552010740628cab002b3a700",
        "region": {
            "_id": "551e67b6d8f1afa01bd8652f",
            "name": "region_name"
        },
        "user": {
            "_id": "551a938af056a7fc099879c1",
            "firstName": "Bill",
            "lastName": "Foo",
            "username": "bill_foo",
            "id": "551a938af056a7fc099879c1"
        },
        "__v": 0,
        "sport": [
            {
                "_id": "551e5e01abb74a8423410b88",
                "nazev": "Hockey"
            }
        ],
        "city": "some_city",
        "advert": "some_advert",
        "title": "some_title",
        "created": "2015-04-04T16:25:24.733Z"
    }
]

编辑: 用户'admin'的预期结果是:

[
    {
        "_id": "5520f52e2c0a22541541bde1",
        "region": {
            "_id": "551e6779d8f1afa01bd86529",
            "name": "region_name"
        },
        "user": {
            "_id": "551a938af056a7fc099879c1",
            "firstName": "John",
            "lastName": "Boo",
            "username": "admin",
            "id": "551a938af056a7fc099879c1"
        },
        "__v": 0,
        "sport": [
            {
                "_id": "551e69c6d8f1afa01bd86533",
                "name": "Running"
            }
        ],
        "city": "some_city",
        "advert": "some_advert",
        "title": "I want to run!",
        "created": "2015-04-05T08:41:18.173Z"
}]

3 个答案:

答案 0 :(得分:4)

循环遍历数组并使用用户名为admin的用户拉出每个项目:

var result = [];
var nameToSearchFor = 'admin';

for(var index = 0; index < arr.length; index++)
{
    var item = arr[index];
    if(item.user.username === nameToSearchFor)
    {
        result.push(item);
    }
}

答案 1 :(得分:0)

您的问题的一个解决方案是搜索驻留admin用户名的索引。在你的情况下是在提供的json数组的0索引。所以你可以通过索引得到整个对象,如下所示:

var i = 0;
for(; i< json.length; i++){
  if(json[i].user.username === "admin") break;
}

现在,您可以使用admin数据获取对象。像这样:

json[i].user.firstName

检查此插件here

修改 如果你只想将那个切片放到一个新的数组中,那么你就可以切片那个json数组了,现在你已经有了索引。

var newArray = json.slice(i, i+1);

答案 2 :(得分:0)

您可以使用像jinqJs这样的开源项目来执行类似数组查询的SQL。

var data = [
    {
        "_id": "5520f52e2c0a22541541bde1",
        "region": {
            "_id": "551e6779d8f1afa01bd86529",
            "name": "region_name"
        },
        "user": {
            "_id": "551a938af056a7fc099879c1",
            "firstName": "John",
            "lastName": "Boo",
            "username": "admin",
            "id": "551a938af056a7fc099879c1"
        },
        "__v": 0,
        "sport": [
            {
                "_id": "551e69c6d8f1afa01bd86533",
                "name": "Running"
            }
        ],
        "city": "some_city",
        "advert": "some_advert",
        "title": "I want to run!",
        "created": "2015-04-05T08:41:18.173Z"
    },
    {
        "_id": "552010740628cab002b3a700",
        "region": {
            "_id": "551e67b6d8f1afa01bd8652f",
            "name": "region_name"
        },
        "user": {
            "_id": "551a938af056a7fc099879c1",
            "firstName": "Bill",
            "lastName": "Foo",
            "username": "bill_foo",
            "id": "551a938af056a7fc099879c1"
        },
        "__v": 0,
        "sport": [
            {
                "_id": "551e5e01abb74a8423410b88",
                "nazev": "Hockey"
            }
        ],
        "city": "some_city",
        "advert": "some_advert",
        "title": "some_title",
        "created": "2015-04-04T16:25:24.733Z"
    }
];

var result = jinqJs()
                .from(data)
                .where(function(row){return row.user.username==='admin';})
                .select();

document.body.innerHTML = '<pre>' + JSON.stringify(result, null, 4) + '</pre><br><br>';
<script src="https://rawgit.com/fordth/jinqJs/master/jinqjs.js"></script>