[英]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);
您可以使用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);
无论如何,您都在使用一个对象。 使用您ID的数组作为键。 使用类似以下内容的game[[id1,id2]] = number
。 这将使您更快地查找,因为JS对象是哈希数据结构。 您的方法提供O(n)查找,而哈希对象通常意味着给O(logn)时间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.