Javascript在JSON中查找对象(我使用Angular)

Javascript find objects in JSON (i use Angular)

本文关键字:Angular 对象 JSON 查找 Javascript      更新时间:2023-09-26

我有JSON对象:

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

我需要在success: true。如:useruser2

也许Angular有一个解决方案?

您不能只使用Angular forEach循环通过列表

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

检查小提琴https://jsfiddle.net/b4yqench/

将具有属性的对象转换为数组

首先将具有属性的对象转换为数组。数组在AngularJS中更有用,尤其是在过滤和排序方面:

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

在视图中使用过滤器

您可以使用"|"运算符在视图中进行筛选:

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

在控制器中使用滤波器

或者,您可以在控制器中使用$filter服务:

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

那么在你看来:

<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>

使用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();
var myKeys = [];
for (var key in yourJson) {
    if (yourJson[key].success) {
       myKeys.push(key);
    }
}

因此,我首先创建了一个名为myKeys的数组
然后,我会循环遍历你Json对象的键对于存在的每个密钥,如果您Json的密钥的属性"success"等于true,我将其添加到数组