2015-07-20 1 views
1

Моего приложения использует Pubnub и я извлечение истории чата с помощью следующего кода:Сравните массив с Foreach элементами

$scope.populateMessages = function() {  
     // Populate message history using jsapi (optional) 
     PubNub.jsapi.history({ 
      channel: $scope.channel, 
      count: 15, 
      callback: function(payload) { 
       payload[0].forEach(function(message) { 
       $scope.messages.push(message); 

       //message timetoken 
       console.log(message.pn_apns.aps.timetoken); 
      }); 
      $scope.messagesStatus = false; 
      $scope.connectionStatus = false; 
      $scope.$apply(); 
      } 
     }); 
    }; 

Когда мое приложение идет от фона я хочу проверить наличие новых сообщений снова. Но когда я запускаю код выше, я получаю дубликаты. Если я очищу $ scope.messages, прежде чем запускать код выше, он работает только на время загрузки.

Так Wat я сейчас пытаюсь сделать, это проверить текущий список сообщений путем извлечения временных маркеров существующих сообщений:

var div = $('.list'); 
var divs = $('.item .chatMessage'); 
var divArray = []; 

for (var i = 0; i < divs.length; i += 1) { 
    divArray.push(divs.attr('timetoken')); 
} 

//list of existing messages timetokens 
console.log(divArray); 

И я хочу, чтобы сравнить их с новыми сообщениями, извлекаемых с populateMessages функция выше. Если сообщение timetoken уже существует ничего не делать, если timetoken не существующие добавить сообщение ($ scope.messages.push (сообщение);)

+0

http://stackoverflow.com/questions/9229645/remove-duplicates-from-javascript-array –

ответ

1

Если вы используете библиотеку как lodash или underscore вы можете сделать

$scope.messages = _.uniq($scope.messages, function(msg) { return msg.timetoken;})

 Смежные вопросы

  • Нет связанных вопросов^_^