【问题标题】:JavaScript - Loop JSON array and match string in subarrayJavaScript - 循环 JSON 数组并匹配子数组中的字符串
【发布时间】:2015-04-05 09:48:42
【问题描述】:

我有带有子数组的 JSON 数组,我想循环它并查找用户的用户名是否为例如“admin”。如果是这样,则创建 JSON 数组包含属于用户“管理员”(地区、运动、城市等)的数据。我不知道如何在循环中找到它然后对其进行切片。对于愚蠢的问题,我很抱歉,但我有点迷茫。

这是具有我所拥有的结构的 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"
}]

【问题讨论】:

  • 请包括预期的输出。
  • 显示你尝试过的一些代码
  • 使用 jquery .each 等:[使用 $.each 对 Json 数据进行 jquery 循环][1] [1]:stackoverflow.com/questions/2342371/…
  • 如果您的数据确实是 JSON,那么您需要首先使用 JSON.parse,因为 [...]JSON is a 100% textual data interchange format originally inspired by JavaScript objects[...],但不是允许您直接访问任何元素的数据结构。否则,您可以使用Matt Ellen 的答案中的 for 循环。

标签: javascript json loops arrays


【解决方案1】:

遍历数组,取出用户名为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);
    }
}

【讨论】:

    【解决方案2】:

    您的问题的一个解决方案是搜索驻留在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);
    

    【讨论】:

      【解决方案3】:

      您可以使用像 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>';
      &lt;script src="https://rawgit.com/fordth/jinqJs/master/jinqjs.js"&gt;&lt;/script&gt;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-15
        • 1970-01-01
        相关资源
        最近更新 更多