致电父对象兄弟姐妹的孩子



嗨,我正在尝试制作自己的Pokédex网站,但是Sinds我擅长数据库,SQL,PHP等,我正在以JavaScript,JSON样式进行此操作。在这样做的过程中,我遇到了一个问题:我想将gen1.gps.Route_1.Exits.South引用到gen1.gps.Pallet_Town.Title,但我不知道如何。当然,我首先搜索了互联网,以找到解决方案,但在上下文中我不了解它。

var gen1 = {
  'gps': {
    'Route_1': {
      'Title': 'Route 1',
      'Exits': {
        'North': 0,
        'South': // pallet town link here
      },
    },
    'Pallet_Town': {
      'Title': 'Pallet Town',
      'Exits': {
        'North': /* route 1 here */,
        'South': 0
      }
    }
  }
}

我希望能够调用gen1.gps.Route_1.Exits.South对象获得gen1.gps.Pallet_TownTitle对象。我还没有调试任何东西,所以我不知道我的错误是什么。
我希望有人可以通过发布有用的答案来帮助我。

需要实现某种ID系统。MySQL为您照顾这一点,但就像您说的那样,您不想学习新语言只是为了看到一些东西。

我在路由上添加了ID,然后编写了一个函数以通过其ID找到路由。代码的底部(Object.size())是获取gps对象中的路由总数。(与array.length相同)

var gen1 = {
  'gps': {
    'Route_1': {
      'Id': 1,
      'Title': 'Route 1',
      'Exits': {
        'North': 0,
        'South': 2
      },
    },
    'Pallet_Town': {
      'Id': 2,
      'Title': 'Pallet Town',
      'Exits': {
        'North': 1,
        'South': 0
      }
    }
  }
};
function getRoute (id)
{
    for (var i = 0; i < gen1.gps.size(); i++)
    {
        if (gen1.gps[i].id == id)
            return gen1.gps[i];
    }
    return false;
}
Object.size = function (obj) 
{
    var size = 0, key;
    for (key in obj) 
        if (obj.hasOwnProperty (key)) size++;
    return size;
};

如果您动态创建对象,则可以节省很多工作:

var gen1 = {
  gps: {}
};
function checkPlace(a) {
  if (!gen1.gps[a]) gen1.gps[a] = {};
  if (!gen1.gps[a].Title) gen1.gps[a].Title = a.split("_").join(" ");
  if (!gen1.gps[a].Exits) gen1.gps[a].Exits = {};
}
function connect(a, b, dir) {
  checkPlace(a);
  checkPlace(b);
  if (dir == "ns") {
    gen1.gps[a].Exits.South = gen1.gps[b];
    gen1.gps[b].Exits.North = gen1.gps[a];
  }
  if (dir == "we") {
    gen1.gps[a].Exits.East = gen1.gps[b];
    gen1.gps[b].Exits.West = gen1.gps[a];
  }
}
connect("Route_1", "Pallet_Town", "ns");
console.log(gen1.gps.Route_1.Exits.South.Title);
console.log(gen1.gps);

最新更新