如何向每位玩家发送一份玩家列表,同时将自己从列表中排除

时间:2017-03-09 09:35:56

标签: javascript arrays for-loop socket.io

对于令人困惑的标题感到抱歉。

如果我有一个数组['Peter','James','Susan','Thomas']并且我想得到array.length个新数组(在这种情况下是4),每个新数组的名称都少一个原来的。

所以我想要的是这4个阵列:

['James','Susan','Thomas']
['Peter','Susan','Thomas']
['Peter','James','Thomas']
['Peter','James','Susan']

如果我想将每个新数组发送给那些名字不存在的人。 (所以我想发送彼得['James','Susan','Thomas']和詹姆斯['Peter','Susan','Thomas']

我目前的代码是:

for(var i=0;i<array.length;i++){
    var player = array[i]
    var newArray= array.splice(i,1)
    io.to(player)emit('message', newArray)
}

返回的数组中只有一个名称。

2 个答案:

答案 0 :(得分:0)

问题是array.splice()修改了原始数组。你需要先复制它,所以你不要破坏原件。您也不应将.splice分配给newArray,因为它会返回已删除元素的数组,而不是已修改的数组。

for (var i = 0; i < array.length; i++) {
    var player = array[i];
    var newArray = array.slice();
    newArray.splice(i, 1);
    io.to(player).emit('message', newArray);
}

答案 1 :(得分:0)

def num1(num,a,b): if num == 0: a=a+1 num=num+1 elif num == 1: b=b+1 return num return a return b 实际上会改变它所调用的数组。它可能令人困惑的原因是它还返回一个包含刚刚删除的元素的数组 - 因此您收到一个包含单个项目的数组。请尝试使用Array#splice,并在运行Array#forEach之前使用array复制Array#slice,以便每次迭代都不会损坏原始数组。

splice