【问题标题】:Building an array with reference to another object by ID parameter通过 ID 参数参考另一个对象构建数组
【发布时间】:2013-02-10 08:33:38
【问题描述】:

我尝试使用每个 ID 的数据构建和排列,因此我可以按 ID 从其中读取数据 所以我实现了这个东西:

for (var i in data.length) {

//data - XML response 
            var obj = {};
            /*setting al data
            obj.ID =parseNode(data[i], "ID");
            obj.year= parseNode(data[i], "year");
            object.model= parseNode(data[i], "model");
            ...
            ..
            */

            if (this.modelData[obj.ID] == null)
                this.modelData[obj.ID] = [];
            this.modelData[obj.ID].push(obj);
        }

因此我得到了一个很长的数组,在这个例子中是 745645364(MAX id),每个 ID 都有对象:

modelData[1]= object
modelData[745645364]= object
modelData[56]= object

并像这样读取数据:

var year = this.modelData[ID].year;

这是正确的做法吗?我认为拥有一个包含 5 个对象和 566456456 的 length 的数组的想法很糟糕......

【问题讨论】:

  • 闻起来像 data 是一个字符串。你检查过吗?
  • 好的,那么您检查过,javascript 将其解释为 xml-doc 吗?试试console.log(typeof data)。而且您的循环不是处理 xml 数据的正确方法。
  • 数据不是这里的问题!它是 XML、List... 任何类型的数据。我解析它没有任何问题,我的问题是如何保存它正确引用到ID

标签: javascript implementation


【解决方案1】:

您可以使用对象而不是数组。这样做可以避免使用包含许多空索引的巨大数组。

【讨论】:

  • “使用对象”是什么意思?我需要一个地方来保存每个 ID 的所有这些数据
  • this.modelData = {} 那么您的代码实际上应该是相同的,除了您对定义的测试:this.modelData[obj.ID] === undefined 而不是 null
  • 我在我的函数 this.modelData = {} 中这样做。如果对象保持不变,我看不出我是如何克服大长度问题的
  • 因此,如果您的 modelData 是一个对象,那么您就没有“巨大”的数组。您有一个带有一些属性标记在您的 id 之后的对象,并且您通过 [] 运算符而不是指向符号来访问它(因为您不知道这些属性的名称)。
  • ogoo 你的意思是使用对象文字 {} 而不是数组...同意你的看法!
猜你喜欢
  • 2021-06-21
  • 1970-01-01
  • 2019-05-05
  • 2019-07-18
  • 2018-09-20
  • 2020-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多