angularjs проверяет, существует ли ключ уже, а если не существует, выдвиньте его в область внутри цикла foreach - PullRequest
0 голосов
/ 30 октября 2019

Я получаю данные из Db, сначала используя php для построения таблицы, затем я получаю новые данные json из сокета и обновляю $ scope, мне нужно только отправить значения, которых нет в $ scope.

angular.forEach(event.market, (market ,keym) => {

   angular.forEach($scope.users.results, function(value, key) {

   if(value.marketId == keym) // keym = new marketId from socket
   {
     //do nothing
   }
  else
  {
     //push(new valuse);  
  }


   });
});

проблема, с которой я сталкиваюсь, заключается в том, что если marketId не совпадает с какими-либо ключами, которые у меня уже есть, то оно нажимает количество раз, которое ему не соответствует, вместо нажатия 1 раз, если оно не совпадает. что я делаю не так?

спасибо

Ответы [ 3 ]

0 голосов
/ 30 октября 2019

Из того, что я понимаю, вы хотите добавить в массив отсутствующие объекты. Я думаю, что то, что вы пытаетесь сделать, может быть просто достигнуто путем:

angular.forEach(event.market, (valueM, keyM) => {
  let isDuplicate = $scope.users.results.filter(user => /* some validation here */).length > 0;

  if(!isDuplicate) {
    // push new values
  }
})
0 голосов
/ 06 ноября 2019

, который решил мою проблему:

angular.forEach(game.market, (market, keym) => {

  var addToArray = true;
  for (var i = 0; i < $scope.users.results.length; i++) {
    if ($scope.users.results[i].marketId == keym) {
      addToArray = false;
    }
  }
  if (addToArray) {


    $scope.users.results.push({
      marketId: keym,
      marketName: market.name
    });

  }

  $scope.users.results.marketName = ' ';
  $scope.users.results.marketId = ' ';

});

спасибо

0 голосов
/ 30 октября 2019

Перед выполнением push в некоторый массив, проверьте, не совпадает ли доза marketId с какими-либо ключами и также не присутствует в массиве. Так что в противном случае вам нужно будет добавить условия для проверки marketId и проверки массива.

...