Question

I create an array like so

var membersList = $('#chatbox_members' , avacweb_chat.doc.body).find('li');
var onlineUsers = [];
var offLineUsers = [];
for(var i =0;i<membersList.length;i++){
    var name = $(membersList[i]).text().replace("@","");
    onlineUsers.push(name);
}
alert(onlineUsers);

listedUsers would come out something like so [Mr.EasyBB,Tonight,Tomorrow,Gone];

Question is if I use a two for loops one outside a setInterval and one inside to compare-

var membersList = $('#chatbox_members' , _chat.doc.body).find('li');
var onlineUsers = [];
var offLineUsers= [];
for(var i =0;i<membersList.length;i++){
    var name = $(membersList[i]).text().replace("@","");
    onlineUsers.push(name);
}
var int = setInterval(function() {
    var newMember = ('#chatbox_members' , _chat.doc.body).find('li');
    for(var i =0;i<newMember.length;i++){
        var name = $(newMember[i]).text().replace("@","");
        offLineUsers.push(name);
    }

Which then would get:

onlineUsers = [Mr.EasyBB,Tonight,Tomorrow,Gone];
offLineUsers =  [Mr.EasyBB,Tonight];

So to get the offline users I want to basically replace onlineUsers with offLineUsers which then should return Tomorrow,Gone . Though I know that an object doesn't have the function to replace so how would I go about this?

I don't think the splice function would work since you need to have parameters, and pop or shift are beginning and end of array.

Was it helpful?

Solution

for(var i = 0 ; i < offLineUsers.length ; i++)
{
    for(var j = 0 ; j < onlineUsers.length ; j++)
    {
        if(onlineUsers[j] == offLineUsers[i])
        {
            onlineUsers.splice(j,1);
        }
    }
}

Try this snippet.

OTHER TIPS

If I have understand well, maybe that helps:

function bus_dup() {
for(var i = 0; i < offLineUsers.length; i++) {
    onLineUsers.splice(onLineUsers.indexOf(offLineUsers[i]),1);
}
offLineUsers = [];
}

This should do what you are looking for on a modern browser, using array.filter

var onlineUsers = ["Mr.EasyBB", "Tonight", "Tomorrow", "Gone"];
var offLineUsers = ["Mr.EasyBB", "Tonight"];

function discord(online, offline) {
    return online.filter(function (element) {
        return offline.indexOf(element) === -1;
    });
}

console.log(discord(onlineUsers, offLineUsers));

Output

["Tomorrow", "Gone"]

On jsfiddle

If you want the difference regardless of the order of attributes passed to the function then you could do this.

var onlineUsers = ["Mr.EasyBB", "Tonight", "Tomorrow", "Gone"];
var offLineUsers = ["Mr.EasyBB", "Tonight"];

function difference(array1, array2) {
    var a = array1.filter(function (element) {
        return array2.indexOf(element) === -1;
    });

    var b = array2.filter(function (element) {
        return array1.indexOf(element) === -1;
    });

    return a.concat(b);
}

console.log(difference(onlineUsers, offLineUsers));
console.log(difference(offLineUsers, onlineUsers));

Output

["Tomorrow", "Gone"] 
["Tomorrow", "Gone"] 

On jsfiddle

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top