javascript对其他变量的引用

时间:2018-07-11 10:26:46

标签: javascript arrays

我正在尝试创建一个对象数组,其中每个对象的属性之一是同一数组中的一些其他对象的列表。与层次结构相似,每个对象都有父对象和子对象。我想知道什么是最有效的方法。我首先想到的是简单地创建唯一ID的数组。所以:

var network = [
{
    "id": "ABCD",
    "description": "some info",
    "parents": [""], //no parents
    "childern": ["EFG"]
},
{
    "id": "EFG",
    "description": "more info",
    "parents": ["ABCD"],
    "children": ["XYZ"]
},
{
    "id": "LMNOP",
    "description": "something",
    "parents": ["ABCD"],
    "children": ["XYZ"]
},
{
    "id": "XYZ",
    "description": "something",
    "parents": ["EFG", "LMNOP"],
    "children": [] //no child nodes
}

我对这种方法的担心是,每当我想对“父母”或“孩子”采取行动时,我只有一个名字字符串。我需要搜索数组以将字符串匹配到具有该ID的任何对象。因此,尽管我可以使用network[2].description获得当前对象的描述,但是我无法做类似network[2].children[0].description的事情。如果数组包含数百个甚至数千个对象,而我一直在搜索它,那我担心性能。

我考虑的第二种方法是存储父节点和子节点的索引,而不是它们的唯一ID。然后,我可以使用诸如network[network[1].children[0]]之类的东西来访问父节点或子节点。但是在这种情况下,我依靠对象的顺序来保持静态。我计划在每个用户会话开始时从noSQL数据库中提取数据,所以我认为我不能依靠顺序保持不变。

还有另一种方法吗?当我想到C ++时,我也许可以存储一个指针,但是我不认为我可以在JS中做到这一点。

2 个答案:

答案 0 :(得分:1)

我建议您将对象存储在 object 中,而不是数组中。然后,您可以使用id作为键(也就是指针)来查找对象:

 var network = {
      "ABCD": {
          "id": "ABCD",
          "description": "some info",
          "parents": [""], //no parents
          "children": ["EFG"]
      },
      "EFG": {
          "id": "EFG",
          "description": "more info",
          "parents": ["ABCD"],
          "children": ["XYZ"]
      },
      "LMNOP": {
          "id": "LMNOP",
          "description": "something",
          "parents": ["ABCD"],
          "children": ["XYZ"]
      },
      "XYZ": {
          "id": "XYZ",
          "description": "something",
          "parents": ["EFG", "LMNOP"],
          "children": [] //no child nodes
      }
    }

    // access a parent like this
    let parent0 = network["XYZ"]["parents"][0];
    console.log(parent0);

    // get an array of your node IDs like this
    let nodeIds = Object.keys(network);
    console.log(nodeIds);

    // can still look up by position then
    console.log(network[nodeIds[0]]);

答案 1 :(得分:0)

您当然可以使用对对象的引用来实现

github "Moya/Moya"
github "rs/SDWebImage"
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseAdMobBinary.json"
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseAnalyticsBinary.json"
github "SVProgressHUD/SVProgressHUD"
github "realm/realm-cocoa"