Обновление значения объекта внутри цикла с использованием JavaScript - PullRequest
0 голосов
/ 23 мая 2018

В настоящее время я сталкиваюсь с трудностями в моих кодах.

Сначала у меня есть массив таких объектов [{Id:1, Name:"AML", allowedToView:"1,2"}, {Id:2, Name:"Res", allowedToView:"1"}...], который пришел из моего сервиса

Я назначаю его в переменной $scope.listofResource

Затем внутри одного из моих объектовУ меня есть ключ allowedToView, который представляет собой набор идентификаторов пользователей, которые я разделяю запятыми.

Затем у меня есть этот код ...

Javascript

$scope.listofResource = msg.data
for (var i = 0; i < msg.data.length; i++) {

Сначала я запускаю цикл for, чтобы я мог отделить Id's каждого пользователя в ключе allowedToView

    var allowed = msg.data[i].allowedToView.split(",");
    var x = [];

Затем я создаю переменную x, чтобы я мог нажатьновый объект к нему с ключами allowedId, который в основном является идентификатором пользователей и resId, который является идентификатором ресурса

    for (var a = 0; a < allowed.length; a++) {
        x.push({ allowedId: allowed[a], resId: msg.data[i].Id });
    }

Затем я помещаю его в Promise.all, потому что у меня естьчтобы получить имя этого «разрешенного пользователя» на основе их идентификаторов, используя сервис

    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; 

Здесь он возвращает идентификатор и имя разрешенного пользователя.Я должен вставить 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

1 Ответ

0 голосов
/ 23 мая 2018

Ссылка на решение - Plunkr

for (var i = 0; i < msg.length; i++) {
  var allowed = msg[i].allowedToView.split(",");
  msg[i].allowedToView1 = [];
  var x = [];

Как правильно указал Алексей Соловей, инициализация массива allowToView1 происходит не в том месте.Его следует переместить в место, где он вызывается один раз для сообщения.В первом цикле я переместил его после параметра allowToView.split, так как это казалось подходящим местом для его инициализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...