简体   繁体   中英

Iterating through Javascript object and count

I have this javascript object. How can iterate through its properties and count the number of one specific value?

    angular.module('App',[])
        .controller('mainCtrl', ['$scope', function ($scope) {

           var data = {  
   "plans":[  
      {  
         "id":1,
         "code":"NEXT_DAY_500gm",
         "name":"Next Day less than 500gm",
         "cost":55,
         "duration":24,
         "min_weight":0,
         "max_weight":500,
         "COD":1,
         "created_at":"-0001-11-30 00:00:00",
         "updated_at":"-0001-11-30 00:00:00"
      },
      {  
         "id":2,
         "code":"NEXT_DAY_500gm_1kg",
         "name":"Next Day 500gm to 1kg",
         "cost":70,
         "duration":24,
         "min_weight":501,
         "max_weight":1000,
         "COD":1,
         "created_at":"-0001-11-30 00:00:00",
         "updated_at":"-0001-11-30 00:00:00"
      },
      {  
         "id":3,
         "code":"NEXT_DAY_1kg_2kg",
         "name":"Next Day 1kg to 2kg",
         "cost":95,
         "duration":24,
         "min_weight":1001,
         "max_weight":2000,
         "COD":1,
         "created_at":"-0001-11-30 00:00:00",
         "updated_at":"-0001-11-30 00:00:00"
      },
      {  
         "id":4,
         "code":"SAME_DAY_500gm",
         "name":"Same Day less than 500gm",
         "cost":95,
         "duration":8,
         "min_weight":0,
         "max_weight":500,
         "COD":1,
         "created_at":"-0001-11-30 00:00:00",
         "updated_at":"-0001-11-30 00:00:00"
      },
      {  
         "id":5,
         "code":"SAME_DAY_500gm_1kg",
         "name":"Same Day 500gm to 1kg",
         "cost":130,
         "duration":8,
         "min_weight":501,
         "max_weight":1000,
         "COD":1,
         "created_at":"-0001-11-30 00:00:00",
         "updated_at":"-0001-11-30 00:00:00"
      },
      {  
         "id":6,
         "code":"SAME_DAY_1kg_2kg",
         "name":"Same Day 1kg to 2kg",
         "cost":165,
         "duration":8,
         "min_weight":1001,
         "max_weight":2000,
         "COD":1,
         "created_at":"-0001-11-30 00:00:00",
         "updated_at":"-0001-11-30 00:00:00"
      }
   ]
};  
          $scope.data1=data;       
       }]);

My concept is i want to count how many times the "status" field is "COMPLETE"and assign that count in a variable. Say if the complete is 4 times my sale will be equal to 4. How can i do that? Any hint?

You need to use filter here:

var count = data.filter(function(obj) {
    return obj.status === 'COMPLETED';
}).length;

console.log(count);

The forEach() method executes a provided function once per array element.

 var data = [{ "id": 23, "sender_id": 3, "courier_id": 0, "deliverer_id": 0, "status": "PENDING", "consignment_id": "55C0A999", "sender_name": "asdasdas d", "cost": "40", "package_description": "asdasdasd", "sender_address": "asdasdasd", "sender_longitude": "", "sender_latitude": "", "sender_number": null, "receiver_address": "adasdasd", "receiver_name": "Shifat Adnan", "receiver_number": "01713206053", "receiver_longitude": "", "receiver_latitude": "", "current_longitude": "", "current_latitude": "", "deliverer": null, "recipient_pays": 0, "instructions": "2332323", "payment_status": null, "cod": 0, "recipient_zone_id": 2, "plan_id": 2, "store_id": null, "storeproduct_id": null, "created_at": "2015-08-04 12:01:29" }, { "id": 28, "sender_id": 5, "courier_id": 0, "deliverer_id": 0, "status": "COMPLETED", "consignment_id": "10F317", "sender_name": "bleh", "cost": "398", "package_description": "Business Order", "sender_address": "bleh", "sender_longitude": "bleh", "sender_latitude": "bleh", "sender_number": "bleh", "receiver_address": "kjakdjlsdjlaksdjl", "receiver_name": "Nigga", "receiver_number": "010203001", "receiver_longitude": "", "receiver_latitude": "", "current_longitude": "bleh", "current_latitude": "bleh", "deliverer": null, "recipient_pays": 0, "instructions": "jslklsdflkj", "payment_status": null, "cod": 0, "recipient_zone_id": null, "plan_id": 4, "store_id": null, "storeproduct_id": null, "created_at": "2015-10-04 09:36:23" }, { "id": 34, "sender_id": 5, "courier_id": 0, "deliverer_id": 0, "status": "PENDING", "consignment_id": "137F24", "sender_name": "bleh", "cost": "3223", "package_description": "Business Order", "sender_address": "bleh", "sender_longitude": "bleh", "sender_latitude": "bleh", "sender_number": "bleh", "receiver_address": "kasdlkaskd asldka", "receiver_name": "FAAskl", "receiver_number": "199102909", "receiver_longitude": "", "receiver_latitude": "", "current_longitude": "bleh", "current_latitude": "bleh", "deliverer": null, "recipient_pays": 0, "instructions": "dsdsdf", "payment_status": null, "cod": 0, "recipient_zone_id": 2, "plan_id": 3, "store_id": null, "storeproduct_id": null, "created_at": "2015-10-06 07:58:28" }, { "id": 35, "sender_id": 5, "courier_id": 0, "deliverer_id": 0, "status": "COMPLETED", "consignment_id": "13C476", "sender_name": "bleh", "cost": "3310", "package_description": "Business Order", "sender_address": "bleh", "sender_longitude": "bleh", "sender_latitude": "bleh", "sender_number": "bleh", "receiver_address": "sdfs dfasdfasdfasdf", "receiver_name": "sfasd", "receiver_number": "224", "receiver_longitude": "", "receiver_latitude": "", "current_longitude": "bleh", "current_latitude": "bleh", "deliverer": null, "recipient_pays": 0, "instructions": "dasdasd", "payment_status": null, "cod": 0, "recipient_zone_id": 2, "plan_id": 1, "store_id": 1, "storeproduct_id": 1, "created_at": "2015-10-06 12:54:14" }, { "id": 36, "sender_id": 5, "courier_id": 0, "deliverer_id": 0, "status": "COMPLETED", "consignment_id": "13C4B3", "sender_name": "bleh", "cost": "330", "package_description": "Business Order", "sender_address": "bleh", "sender_longitude": "bleh", "sender_latitude": "bleh", "sender_number": "bleh", "receiver_address": "sdfs dfasdfasdfasdf", "receiver_name": "Some full name", "receiver_number": "224", "receiver_longitude": "", "receiver_latitude": "", "current_longitude": "bleh", "current_latitude": "bleh", "deliverer": null, "recipient_pays": 0, "instructions": "dasdasd", "payment_status": null, "cod": 0, "recipient_zone_id": 3, "plan_id": 4, "store_id": 1, "storeproduct_id": 2, "created_at": "2015-10-06 12:55:15" }]; var count = 0; data.forEach(function(item) { if (item.status === 'COMPLETED') { ++count; } }); alert(count); 

You can loop through your json object like this:

var complete = 0;
for(var i = 0; i < data.length; i++) {
    var obj = data[i];
    if (obj['status'] == "COMPLETE"){
        complete += 1;
    }
}
//do something with complete.
    var count = 0;

    for (var i = 0, leng = data.plans.length; i < leng; i++)
    {
        if (data.plans[i].status === 'COMPLETE')
        {
            count++;
        }
    }

    if (count === 4)
    {

    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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