2015-04-05 56 views
1

我有JSON数组与子数组,我想循环它,并找到用户的用户名是否例如'管理'。如果是这样,那么创建JSON数组包含属于用户'admin'(地区,体育,城市等)的数据。我不知道如何在循环中找到它,然后切片。我很抱歉这个愚蠢的问题,但我有点失落。JavaScript的循环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" 
    } 
] 

编辑: 的用户“管理员”预期的结果则是:

[ 
    { 
     "_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" 
}] 
+0

请注明期望的输出。 – thefourtheye 2015-04-05 09:50:02

+0

显示一些代码,你试过 – 2015-04-05 09:51:04

+0

使用jQuery。每个 等: [使用$ JSON数据jQuery的循环。每个] [1] [1]:HTTP://计算器.com/questions/2342371/jquery-loop-on-json-data-using-each – khodadadi 2015-04-05 10:00:10

回答

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); 
    } 
} 
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); 
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>