【发布时间】:2018-05-23 08:37:57
【问题描述】:
我目前在编写代码时遇到了困难。
首先我有一个像 [{Id:1, Name:"AML", allowedToView:"1,2"}, {Id:2, Name:"Res", allowedToView:"1"}...] 这样的对象数组,它们来自我的服务
我把它赋值给变量$scope.listofResource
然后在我的一个对象中,我有 allowedToView 键,它是我用逗号分隔的用户 ID 的集合。
然后我有这个代码...
Javascript
$scope.listofResource = msg.data
for (var i = 0; i < msg.data.length; i++) {
首先我运行一个 for 循环,这样我就可以在 allowedToView 键中分隔每个用户的 Id's
var allowed = msg.data[i].allowedToView.split(",");
var x = [];
然后我创建一个变量x,这样我就可以使用allowedId 的键向它推送一个新对象,这基本上是用户的ID,resId 是资源的ID
for (var a = 0; a < allowed.length; a++) {
x.push({ allowedId: allowed[a], resId: msg.data[i].Id });
}
然后我把它放在Promise.all,因为我必须根据他们使用服务的 ID 来获取“允许用户”的名称
Promise.all(x.map(function (prop) {
var d = {
allowedId: parseInt(prop.allowedId)
}
return ResourceService.getAllowedUsers(d).then(function (msg1) {
msg1.data[0].resId = prop.resId;
这里返回允许用户的 ID 和名称。我必须插入resId,这样它才能传递给返回对象,它将显示在下面的.then()中
return msg1.data[0]
});
})).then(function (result) {
我得到了我想要的结果,但现在这是我的问题
angular.forEach(result, function (val) {
angular.forEach($scope.listofResource, function (vv) {
vv.allowedToView1 = [];
if (val.resId === vv.Id) {
vv.allowedToView1.push(val);
我想更新$scope.listofResource.allowedToView1,它应该包含一个对象数组,它基本上是允许用户的信息。但是每当我在这里推送一个值vv.allowedToView1.push(val); 它总是更新数组的最后一个对象。
}
})
})
});
}
所以我的代码的结果总是这样
[{Id:1, Name:"AML", allowedToView:"1,2", allowedToView:[]}, {Id:2, Name:"Res", allowedToView:"1", allowedToView:[{Id:1, Name:" John Doe"}]}...]
第一个结果总是空白。谁能帮帮我?
这是它的笨拙...Plunkr
【问题讨论】:
-
将完整的代码 sn-p 放在一起,这样它也可以一次读取。在 JSFiddle 上复现问题会让其他人更容易更快地帮助你
-
现在好了,先生。我已经把它放在 plunker 里了
-
问题出在
vv.allowedToView1 = [],你每次都在循环中覆盖它。您应该更改逻辑,以便数组的初始化将在循环之外
标签: javascript arrays angularjs loops