AngularJS - 从JSON数组中获取特定数据

时间:2016-08-16 18:29:41

标签: javascript jquery angularjs json

以下是API返回的图片:

enter image description here

我正在尝试创建能够抓住"当前审批人"和"状态"从这个数组。如果"当前审批人"匹配存储在本地存储中的用户名和"状态"是"被拒绝"然后我想运行一行jquery。

这就是我所拥有的:

$http.get( API + '/car' ).
success(function(data) {
  $scope.myCars = data;
  console.log(data);

  var originator = $scope.myCars["My CARs"]["Current Approver"],
      status = $scope.myCars["My CARs"].Status,
      user = localStorage.getItem('user') || null

  // Check if logged in user is originator and CAR is "REJECTED"
  if (originator === user && status === 'REJECTED') {
    $('#termCar').css('display', 'block');
  }

});

这是HTML:

<div ng-repeat="car in myCars['My CARs']" class="myCar">
  <div class="carId">{{ car['Display Name'] }}</div>
  <div class="title">{{ car['Project Title'] }}</div>
  <div id="termCar" class="termCar"><a ui-sref="taskDetails">Terminate</a></div>
</div>

我知道它与这些线有关(显然):

originator = $scope.myCars["My CARs"]["Current Approver"],
status = $scope.myCars["My CARs"].Status

我猜不知道如何从阵列中提取特定数据。

我需要能够遍历对象数组并找到符合if语句的对象,然后如果其中一个对象运行jQuery行。

感谢您的帮助。

4 个答案:

答案 0 :(得分:0)

尝试:

originator = $scope.myCars["My CARs"][0]["Current Approver"];
status = $scope.myCars["My CARs"][0].Status

您根本没有引用要从中获取值的数组中的哪个索引。

答案 1 :(得分:0)

你是对的,问题是:

$scope.myCars["My CARs"]["Current Approver"]

要实现这一点,您的数据结构必须如下所示:

"My CARS": {
  "Current Approver": "..."
}

My CARs是一个对象数组,因此您需要迭代该数组。您通常会使用基本的forEach执行此操作。 Lodash做得很好,但我会使用原生的js:

var user = localStorage.getItem('user');
$http.get('/car').success(function(data) {
  var cars = data['My CARs'];
  cars.forEach(function(car) {
    if (car["Current Approver"] === user && car.Status === 'REJECTED') {
      // do stuff
    }
  });
});

答案 2 :(得分:0)

您需要过滤数组My CARs以匹配本​​地用户

$http.get(API + '/car').success(function(data) {
    $scope.myCars = data;
    console.log(data);
    var user = localStorage.getItem('user') || null;
    var originator = $scope.myCars["My CARs"].filter(function(d) {
        return d["Current Approver"] === user && d["Status"] === 'REJECTED'
    });

    if (originator.length) {
        $('#termCar').css('display', 'block');
    }
});

答案 3 :(得分:0)

试试这个:

var cars = $scope.myCars["My CARs"];
for(int i = 0; i < cars.length; i++) {
    var theCar = cars[i]; 
    if(theCar["Current Approver"] === user && theCar["Status"] === "REJECTED") {
        originator = theCar["Current Approver"];
        status = theCar.Status;
        break;
    }
}

这将为您提供匹配其Current Approveruser匹配的第一辆汽车的状态。