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

問題は、2 つの for ループを setInterval の外側に 1 つと内側に 1 つ使用して比較するかどうかです。

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。オブジェクトには置き換える機能がないことはわかっていますが、どうすればよいでしょうか。

パラメータが必要であり、ポップまたはシフトが配列の始まりと終わりであるため、スプライス関数は機能しないと思います。

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 に答える