匹配不同数组中的两个值

时间:2013-12-18 13:46:26

标签: javascript arrays object

我正在进行简单的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]可能是值中的任何一个,而不仅仅是第一个值。

5 个答案:

答案 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,然后返回该集合中的另一个数字