JS - 按值获取对象中的数组

时间:2016-05-03 17:40:26

标签: javascript arrays object

我有一个对象game = {};,我在一个对象的每个数字下保存一个包含两个id的数组 - game[number] = [id1, id2];,例如game[0] = [234342, 134313]。 如何只通过数组game[number]的一个id获取对象[id1, id2]的数量?显然,每个id只在整个对象中使用过一次。

感谢您的时间。

6 个答案:

答案 0 :(得分:2)

这样的事情怎么样?对于object中的每个项目,对于id数组中的每个项目,查找我们的id。

var game = {
    1:[123,345],
    2:[124,456],
    3:[125,567]
}

function find(findId) {
    var returnId = 0;
    for(var id in game) { 
        console.log(game[id]); 
        for (var i = 0; i < game[id].length; i++) {
            if (game[id][i] == findId) {
                returnId = id;
            }
        }
    }
    return returnId;
}

console.log(find(124));

答案 1 :(得分:1)

如果找到了id,你可以使用Array#some()和短路的可能性。

var game = { 1: [123, 345], 2: [124, 456], 3: [125, 567] },
    ids = function (id, data) {
        var r;
        Object.keys(data).some(function (k) {
            return data[k].some(function (a) {
                if (id === a) {
                    r = data[k];
                    return true;
                }
            });
        });
        return r;
    }(456, game);

document.write('<pre>' + JSON.stringify(ids, 0, 4) + '</pre>');

答案 2 :(得分:1)

var game, id, k, val;
game = {
  1: ['aa', 'ab'],
  2: ['ba', 'bb']
};
find_game = function(id, data) {
  for (k in game) {
    for (val in game[k]) {
      if (id === game[k][val]) {
        return k
      }
    }
  }
}

答案 3 :(得分:1)

var game = { '0': [ 234342, 134313 ],
  '1': [ 23434, 13431 ],
  '2': [ 23432, 13433 ] }

var i
var id = 23432;
for (i in game){
    if (game[i].indexOf(id) > -1){
        console.log(i);
        break;
    }
}

或基于功能的方法

var game = { '0': [ 234342, 134313 ],
  '1': [ 23434, 13431 ],
  '2': [ 23432, 13433 ] }

function getNumber(id, game){
  var i
  for (i in game){
    if (game[i].indexOf(id) > -1){
        return i;
    }
  }
}

var id = 23432;
var number = getNumber(id, game)
console.log(number);

答案 4 :(得分:1)

您可以使用filterreduce作为

function findIt(game, theId){
  return Object.keys(game).filter(function(index){
    return game[index].reduce((a, b) => (a == theId || b == theId));
  })[0];
}

findIt(game, 444);

答案 5 :(得分:0)

你总是在使用一个物体。使用您的id的数组作为键。使用类似这样的内容game[[id1,id2]] = number。这将为您提供更快的查找,因为JS对象是哈希数据结构。您的方法提供O(n)查找,而哈希对象通常用于给出O(logn)时间。