繁体   English   中英

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

[英]JS - get array in an object by value

我有一个目标game = {}; 然后我在对象的每个数字下保存一个带有两个ID的数组game[number] = [id1, id2]; 例如game[0] = [234342, 134313] 如何仅通过数组[id1, id2]一个id获得对象game[number]game[number] 显然,每个id在整个对象中仅使用一次。

谢谢你的时间。

那这样的东西呢? 对于对象中的每个项目,对于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));

如果找到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>'); 

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
      }
    }
  }
}
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);

您可以使用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);

无论如何,您都在使用一个对象。 使用您ID的数组作为键。 使用类似以下内容的game[[id1,id2]] = number 这将使您更快地查找,因为JS对象是哈希数据结构。 您的方法提供O(n)查找,而哈希对象通常意味着给O(logn)时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM