我有一个对象game = {};
,我在一个对象的每个数字下保存一个包含两个id的数组 - game[number] = [id1, id2];
,例如game[0] = [234342, 134313]
。
如何只通过数组game[number]
的一个id获取对象[id1, id2]
的数量?显然,每个id只在整个对象中使用过一次。
感谢您的时间。
答案 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)
您可以使用filter
和reduce
作为
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)时间。