【问题标题】:Call childs of parent object siblings调用父对象兄弟的子对象
【发布时间】:2017-12-06 13:56:17
【问题描述】:

嗨,我正在尝试制作自己的 Pokédex 网站,但我不太擅长数据库、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 对象。 我还没有调试任何东西,所以我不知道我的错误是什么或将会是什么。
我希望有人可以通过发布有用的答案来帮助我。

【问题讨论】:

  • 你不能。创建 gen1 后,您可以设置引用,但不能在“同时”创建它时进行。
  • 如果我要创建一个函数对象?
  • 这取决于。您只能设置对现有对象的引用。如果您的函数这样做,它将起作用。如果它尝试执行与您上面的代码相同的操作,则不会。
  • @ChrisG 好的,如果我要在不引用其他对象的情况下创建对象,我可以在那之后设置这些引用吗?

标签: javascript json object javascript-objects


【解决方案1】:

需要实现某种 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;
};

【讨论】:

    【解决方案2】:

    如果动态创建对象,可以节省大量工作,如下所示:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多