1

I have JSON objects:

{
    "user": { "success":true },
    "user1": { "success":false, "error":"User already exists" },
    "user2": { "success":true, "error":"Wrong credentials" },
    "user3": { "success":false, "error":"Wrong credentials" }
}

I need find objects names where success: true. Like: user, user2.

Maybe there is a solution for Angular?

victorkt
  • 13,992
  • 9
  • 52
  • 51
trigger
  • 489
  • 10
  • 26

4 Answers4

0
var myKeys = [];
for (var key in yourJson) {
    if (yourJson[key].success) {
       myKeys.push(key);
    }
}

So, I first create an array named myKeys.
Then, I will loop through the keys of the object yourJson For each key that exists, if the property "success" of the key of yourJson is equal to true, I add it into the array

Deblaton Jean-Philippe
  • 11,188
  • 3
  • 49
  • 66
0

Cant you just use the Angular forEach to loop through the list

var users = [];
angular.forEach(list, function (value, user) {
    if (value.success == true) {
        alert(user)
        users.push(user)
    }
});

Check the fiddle https://jsfiddle.net/b4yqench/

R4nc1d
  • 2,923
  • 3
  • 24
  • 44
0

Convert Object with Properties to an Array

First convert your object with properties to an array. Arrays are more useful in AngularJS, especially for filtering and sorting:

var users = {
  "user":{"success":true},
  "user1":{"success":false,"error":"User already exists"},
  "user2":{"success":true,"error":"Wrong credentials"},
  "user3":{"success":false,"error":"Wrong credentials"}
};
$scope.users = [];
angular.forEach(users, function(item, key) {
    $scope.users.push({ name: key, data: item } );
});

Using Filter in View

You can filter in the view by using the '|' operator:

<ul>
   <li ng-repeat="user in users | filter:{ data: { success:'true'} }">
     {{ user }}
   </li>
</ul>

Using Filter in Controller

Alternatively, you can use the $filter service in the controller:

$scope.filtered = $filter('filter')($scope.users, { data: { success:'true' }});

Then in your view:

<ul>
  <li ng-repeat="user in filtered ">
    {{ user }}
  </li>
</ul>

    var app = angular.module('app', []);
    app.controller('ctrl', function($scope, $filter) {
      var users = {
        "user": {
          "success": true
        },
        "user1": {
          "success": false,
          "error": "User already exists"
        },
        "user2": {
          "success": true,
          "error": "Wrong credentials"
        },
        "user3": {
          "success": false,
          "error": "Wrong credentials"
        }
      };
      $scope.users = [];
      angular.forEach(users, function(item, key) {
        $scope.users.push({
          name: key,
          data: item
        });
      });

      $scope.filtered = $filter('filter')($scope.users, {
        data: {
          success: 'true'
        }
      });


    });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="ctrl">
  <h2>Use Filter in View</h2>
  <ul>
    <li ng-repeat="user in users | filter:{ data: { success:'true'} }">
      {{ user }}
    </li>
  </ul>

  <h2> Use Filter in Controller</h2>
  <ul>
    <li ng-repeat="user in filtered ">
      {{ user }}
    </li>
  </ul>
</div>
Michael Kang
  • 52,003
  • 16
  • 103
  • 135
0

USING UNDERSCORE

var data = {
    "user": { "success":true },
    "user1": { "success":false, "error":"User already exists" },
    "user2": { "success":true, "error":"Wrong credentials" },
    "user3": { "success":false, "error":"Wrong credentials" }
}

var filtered = _.chain(data)
                .values()
                .filter(function(x){return x.success === true})
                .value();
Community
  • 1
  • 1
JackNova
  • 3,911
  • 5
  • 31
  • 49