繁体   English   中英

JavaScript-循环JSON数组并匹配子数组中的字符串

[英]JavaScript - Loop JSON array and match string in subarray

我有带子数组的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"
}]

遍历数组,并使用用户名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);
    }
}

解决您的问题的一种方法是搜索驻留在admin用户名中的索引。 您的情况是在提供的json数组的0索引处。 因此,您可以按索引获取整个对象,如下所示:

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

现在,您可以获取带有admin数据的对象。 像这样:

json[i].user.firstName

在这里检查这个小东西

编辑如果您只想将该切片切成新数组,则可以将json数组的那一部分切片,现在有了索引。

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

您可以使用像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> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM