【问题标题】:Compare array with forEach items将数组与 forEach 项目进行比较
【发布时间】:2015-07-20 13:15:28
【问题描述】:

我的应用正在使用 Pubnub,我正在使用以下代码检索聊天记录:

$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,它只会工作,只有加载时间。

所以我目前正在尝试做的是通过检索现有消息的时间标记来检查当前的消息列表:

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(message);)

【问题讨论】:

标签: javascript angularjs pubnub


【解决方案1】:

如果您使用像 lodashunderscore 这样的库,您可以这样做

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

【讨论】:

    猜你喜欢
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 2021-06-21
    • 2015-08-04
    • 2015-09-29
    • 1970-01-01
    相关资源
    最近更新 更多