JSON对象获取长度

时间:2016-02-09 05:09:41

标签: javascript jquery arrays json

我嵌套了JSON,如下所示:

var data =  [
   {
      "id":"4",
      "name":"2nd anniversary",
      "date":"2015-12-17",
      "location":"Mumbai",
      "story_body":"Gzjjs jdk djks jdks jdkd jx djdb djd JD djbd djdj d",
      "short_link":"izWfs",
      "created_at":"2015-12-11 03:49:52",
      "path":[
         "\/SupportData\/ImpalzB2B\/uploads\/711453354154623.jpg",
         "\/SupportData\/ImpalzB2B\/uploads\/90294930451449759544217.jpg",
         "\/SupportData\/ImpalzB2B\/uploads\/471453355023537.jpg",
         "\/SupportData\/ImpalzB2B\/uploads\/90294930451449759544223.jpg",
         "\/SupportData\/ImpalzB2B\/uploads\/90294930451449759544179.jpg"
      ],
      "update_type":"3"
   },       
   {
     "id":"7",
     "name":"#1styearAnniversary",
     "date":"2016-01-20",
     "location":"Mumbai",
     "story_body":"Bsjsj jdkdk djdkdk dkdkf kdkf dkfj fjfj fjfkjdd djkd",
     "short_link":"FHXh0",
     "created_at":"2016-01-20 23:10:54",
     "path":"\/SupportData\/ImpalzB2B\/uploads\/11453356652175.jpg",
     "update_type":"3"
   },       
   {
      "id":"19",
      "name":"Product qetyfvhchv",
      "description":"Cheers Vgdhvjd hugging",
      "short_link":"jPE7G",
      "created_at":"2016-01-18 05:03:46",
      "path":"\/SupportData\/ImpalzB2B\/uploads\/90294930451453118625255.jpg",
      "update_type":"4"
   },
   {
      "id":"20",
      "name":"F frfgcgj ggvvhv",
      "description":" Vdhsj fgjjchk",
      "short_link":"hMn8K",
      "created_at":"2016-01-18 05:04:16",
      "path":"\/SupportData\/ImpalzB2B\/uploads\/90294930451453118654785.jpg",
      "update_type":"4"
   },       
   {
      "id":"25",
      "name":"Gshsh djdj djdkd dkkd",
      "description":"Bsjjd djjd djdirj dudir",
      "short_link":"dhT6l",
      "created_at":"2016-01-22 05:39:31",
      "path":[
         "\/SupportData\/ImpalzB2B\/uploads\/11453466369930.jpg",
         "\/SupportData\/ImpalzB2B\/uploads\/11453466369891.jpg",
         "\/SupportData\/ImpalzB2B\/uploads\/11453466369942.jpg",
         "\/SupportData\/ImpalzB2B\/uploads\/11453466369934.jpg",
         "\/SupportData\/ImpalzB2B\/uploads\/11453466369939.jpg"
      ],
      "update_type":"4"
   },
   {
      "id":"26",
      "name":"For Healthy Breakfast, head over to our new restaurant in Andheri",
      "description":"Delightful upma",
      "short_link":"CG0i4",
      "created_at":"2016-02-04 06:58:17",
      "path":"\/SupportData\/ImpalzB2B\/uploads\/11454594295456.jpg",
      "update_type":"4"
   },
   {
      "id":"1",
      "body":"#Awesome2Eat",
      "votes":"28",
      "update_type":"7",
      "short_link":"GcKAe",
      "created_at":"2016-02-04 01:28:53",
      "name":"nehil"
   },      
   {
      "id":"10",
      "body":"#Bouncy",
      "votes":"1",
      "update_type":"7",
      "short_link":"JXUxz",
      "created_at":"2016-02-04 00:12:52",
      "name":"nehil"
   },
   {
      "id":"11",
      "body":"#Superman",
      "votes":"0",
      "update_type":"7",
      "short_link":"4Keyd",
      "created_at":"2016-02-04 01:17:36",
      "name":"nehil"
   }       
]

如何从Object获取长度的路径数组? 我尝试过这个错误的长度。

for (var key in data) {  
  if(data[key].update_type == '3'){ 
    console.log(data[key].path.length);     // 5 and 49 . It Should be 5 and 1
  } 
};  

这也是获取Object的每个元素的正确方法吗? :

for (var key in data) {  
   console.log(data[key].id);    
       $.each(data[key].path, function (i, obj) {
         console.log(obj);
       });
   };

小提琴链接:http://jsfiddle.net/Nehil/2ym3ffo0/

4 个答案:

答案 0 :(得分:3)

因为data[key].path的值类型不是数组(第二个实例),所以它是String。而String还有length属性,它给出了字符串的长度。

制作

for (var key in data) {  
  if(data[key].update_type == '3')
  { 
    if (typeof data[key].path == "string" )
    {
      console.log( 1 );
    }
    else
    {
       console.log(data[key].path.length);     // 5 and 49 . It Should be 5 and 1
       //to print all the elements on the console one by one
       if ( data[key].path && data[key].path.length > 0 )
       {
         data[key].path.forEach( function(value){
           console.log( value );
         } );
       }
    }
  } 
}  

答案 1 :(得分:2)

您可以使用forEach循环:

  

forEach()方法每个数组执行一次提供的函数   元件。

var data = [{
  "id": "4",
  "name": "2nd anniversary",
  "date": "2015-12-17",
  "location": "Mumbai",
  "story_body": "Gzjjs jdk djks jdks jdkd jx djdb djd JD djbd djdj d",
  "short_link": "izWfs",
  "created_at": "2015-12-11 03:49:52",
  "path": [
    "\/SupportData\/ImpalzB2B\/uploads\/711453354154623.jpg",
    "\/SupportData\/ImpalzB2B\/uploads\/90294930451449759544217.jpg",
    "\/SupportData\/ImpalzB2B\/uploads\/471453355023537.jpg",
    "\/SupportData\/ImpalzB2B\/uploads\/90294930451449759544223.jpg",
    "\/SupportData\/ImpalzB2B\/uploads\/90294930451449759544179.jpg"
  ],
  "update_type": "3"
}, {
  "id": "7",
  "name": "#1styearAnniversary",
  "date": "2016-01-20",
  "location": "Mumbai",
  "story_body": "Bsjsj jdkdk djdkdk dkdkf kdkf dkfj fjfj fjfkjdd djkd",
  "short_link": "FHXh0",
  "created_at": "2016-01-20 23:10:54",
  "path": "\/SupportData\/ImpalzB2B\/uploads\/11453356652175.jpg",
  "update_type": "3"
}, {
  "id": "19",
  "name": "Product qetyfvhchv",
  "description": "Cheers Vgdhvjd hugging",
  "short_link": "jPE7G",
  "created_at": "2016-01-18 05:03:46",
  "path": "\/SupportData\/ImpalzB2B\/uploads\/90294930451453118625255.jpg",
  "update_type": "4"
}, {
  "id": "20",
  "name": "F frfgcgj ggvvhv",
  "description": " Vdhsj fgjjchk",
  "short_link": "hMn8K",
  "created_at": "2016-01-18 05:04:16",
  "path": "\/SupportData\/ImpalzB2B\/uploads\/90294930451453118654785.jpg",
  "update_type": "4"
}, {
  "id": "25",
  "name": "Gshsh djdj djdkd dkkd",
  "description": "Bsjjd djjd djdirj dudir",
  "short_link": "dhT6l",
  "created_at": "2016-01-22 05:39:31",
  "path": [
    "\/SupportData\/ImpalzB2B\/uploads\/11453466369930.jpg",
    "\/SupportData\/ImpalzB2B\/uploads\/11453466369891.jpg",
    "\/SupportData\/ImpalzB2B\/uploads\/11453466369942.jpg",
    "\/SupportData\/ImpalzB2B\/uploads\/11453466369934.jpg",
    "\/SupportData\/ImpalzB2B\/uploads\/11453466369939.jpg"
  ],
  "update_type": "4"
}, {
  "id": "26",
  "name": "For Healthy Breakfast, head over to our new restaurant in Andheri",
  "description": "Delightful upma",
  "short_link": "CG0i4",
  "created_at": "2016-02-04 06:58:17",
  "path": "\/SupportData\/ImpalzB2B\/uploads\/11454594295456.jpg",
  "update_type": "4"
}, {
  "id": "1",
  "body": "#Awesome2Eat",
  "votes": "28",
  "update_type": "7",
  "short_link": "GcKAe",
  "created_at": "2016-02-04 01:28:53",
  "name": "nehil"
}, {
  "id": "10",
  "body": "#Bouncy",
  "votes": "1",
  "update_type": "7",
  "short_link": "JXUxz",
  "created_at": "2016-02-04 00:12:52",
  "name": "nehil"
}, {
  "id": "11",
  "body": "#Superman",
  "votes": "0",
  "update_type": "7",
  "short_link": "4Keyd",
  "created_at": "2016-02-04 01:17:36",
  "name": "nehil"
}]



data.forEach((a) => {  /*ES6 Arrow funtion. can use simple 'function(){}' too*/
  if (typeof a.path == "string") {
    console.log(1);
  } else if(typeof a.path!=='undefined') {
    console.log(a.path.length);
  }else{
    console.log(-1);
  }
})

答案 2 :(得分:0)

这是我使用UnderscoreJs的解决方案:

_.each(data, function(item) {
    if (item['update_type'] != '3') return;
    var path = (_.isString(item.path) ? [item.path] : item.path) || [];
    var pathCount = path.length;

    // Log path count for item.
    pathCount && console.log(pathCount);

    // Or log path list for item.
    pathCount && _.each(path, function(pathStr) { console.log(pathStr); });
});

答案 3 :(得分:0)

  

在这个答案中我反复使用这段代码:

var path = (item.path && typeof item.path == 'string' ? [item.path] : item.path) || [];
  

将其分解,如果item.path是真的,如果它是一个字符串,则将其设置为[item.path](即具有单个元素== item.path的数组),否则使用item.path

     

如果这会导致falsey值(item.path未定义或为null等)set path = []为空数组

     

现在路径将始终是一个数组,所以.length / .forEach / $。每个都可以正常工作(除非item.path是其他字符串/数组/ undefined / null当然)

因为您已经使用jquery.each,所以可以这样做

$.each(data, function(i, item) {
    if (item.update_type == '3') {
        var path = (item.path && typeof item.path == 'string' ? [item.path] : item.path) || [];
        console.log(path.length);
    }
});

$.each(data, function(i, item) {
    console.log(item.id);
    var path = (item.path && typeof item.path == 'string' ? [item.path] : item.path) || [];
    $.each(path, function (i, obj) {
        console.log(obj);
    });
});

我更喜欢尽可能少地使用jquery

data.forEach(function (item) {
    if (item.update_type == '3') {
        var path = (item.path && typeof item.path == 'string' ? [item.path] : item.path) || [];
        console.log(path.length);
    }
});

data.forEach(function (item) {
    console.log(item.id);
    var path = (item.path && typeof item.path == 'string' ? [item.path] : item.path) || [];
    path.forEach(function (obj) {
        console.log(obj);
    });
});
  

使用forEach如果您认为可能需要支持IE8或更低版本,则可能需要此polyfill