1

我像这样创建一个数组

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会像这样[Mr.EasyBB,Tonight,Tomorrow,Gone];

问题是我是否使用两个 for 循环,一个在 setInterval 之外,一个在内部进行比较-

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);
    }

然后会得到:

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

因此,为了获得我想基本上替换的离线用户onlineUsersoffLineUsers然后应该返回Tomorrow,Gone。虽然我知道一个对象没有替换的功能,但我该怎么做呢?

我不认为 splice 函数会起作用,因为您需要有参数,并且 pop 或 shift 是数组的开始和结束。

4

3 回答 3

1
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);
        }
    }
}

试试这个片段。

于 2013-05-27T21:30:13.117 回答
0

这应该可以使用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));

输出

["Tomorrow", "Gone"]

jsfiddle 上

如果您想要差异而不考虑传递给函数的属性顺序,那么您可以这样做。

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

输出

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

jsfiddle 上

于 2013-05-27T21:30:55.890 回答
0

如果我理解得很好,也许这会有所帮助:

function bus_dup() {
for(var i = 0; i < offLineUsers.length; i++) {
    onLineUsers.splice(onLineUsers.indexOf(offLineUsers[i]),1);
}
offLineUsers = [];
}
于 2013-05-27T21:55:37.843 回答