AngularJS - 从JSON数组
问题描述:
这里抓具体的数据是什么,API将返回的图片:AngularJS - 从JSON数组
我试图创建抢“当前审批人”和“状态”变量这个数组。如果“Current Approver”与本地存储中存储的用户名相匹配,并且“Status”为“REJECTED”,那么我想运行一行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线。
感谢您的任何帮助。
答
尝试:
originator = $scope.myCars["My CARs"][0]["Current Approver"];
status = $scope.myCars["My CARs"][0].Status
你根本就没有引用您希望从抓住其值指数在数组中。
答
你是对的,问题是这样的:
$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
}
});
});
答
你需要数组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');
}
});
答
试试这个:
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 Approver
匹配user
的状态。