我正在进行简单的WebSockets聊天,并且有两个数组(这是服务器端,Node.js):
var clients = {1: "info about 1", 2: "info about 2", 3: "info about 3", 4: "info about four", 5: "info about five", 6: "info about six"};
var partners = [[1,3], [2,6], [5, 4]];
现在我需要做的是在伙伴数组中查找客户伙伴。因此,例如,如果我的脚本返回4
,则需要查找4
,然后返回5
,如果我的脚本返回1
,它将返回{ {1}}。
我尝试使用3
,但问题是partners[mynumber][0]
可能是值中的任何一个,而不仅仅是第一个值。
答案 0 :(得分:1)
嗯,你必须首先寻找那个特定的数组:
function partnerOf(someId) {
var res;
for (var i = 0, l = partners.length; i < l; i++) {
if (partners[i][0] === someId) {
res = partners[i][1];
break;
}
}
return res;
}
......但它看起来很笨重。另一种方法是重新组织partners
结构,将其转换为对象:
var partners = {
1: 3,
2: 6,
5: 4
};
然后查找变得微不足道:你只评估partners[someId]
,这就是全部。两者都更易读,速度更快。
答案 1 :(得分:0)
你可以做到
var possiblePartners=partners[mynumber];
var partnerNum=(possiblePartners[0]==myNumber)?possiblePartners[1]:possiblePartners[0];
但是,最好的办法是与合作伙伴建立关联数组,例如
var partners={1:3,2:6,5:4};
var partnerNum=partners[mynubmber];
答案 2 :(得分:0)
试试这个:
Array.prototype.different = function(arr2) {
var ret = [];
arr2.sort();
for(var i = 0; i < this.length; i += 1) {
if(arr2.indexOf( this[i] ) > -1){
ret.push( this[i] );
}
}
return ret;
};
像这样使用
console.log(yourArray1.different(yourArray2));
答案 3 :(得分:0)
我会更改数据结构,以便轻松找到合作伙伴
// defined partners DB
var partners = {};
// adds a chat from c1 to c2
function addChat(partners, c1, c2){
partners[c1] = c2;
partners[c2] = c1;
}
function findChatPartner(partners, c1){
return partners[c1];
}
答案 4 :(得分:0)
您可以使用for循环和if / else语句
for (var i = 0, n = partners.length; i < n; i++) {
if (partners[i][0] === mynumber)
return partners[i][0];
else if (partners[i][1] === mynumber)
return partners[i][1];
}
迭代遍历数组中的每组数字,直到找到mynumber
,然后返回该集合中的另一个数字