我正在开发一个javascript插件,它将采用一系列元素并以自定义方式(排序,列的顺序,标准)在表格中显示它。 定制选项将动态创建(日期属性将生成'之前'标准等)。
该插件将在许多不同的项目中使用,因此元素可能会有很大差异,并且随着显示的自定义,每个表创建所需的属性也会有所不同。
我应该要求将元素作为对象还是数组?
基本上(不是真正的代码 - 我不会使用foreach;)所做的是:
foreach element in allelements
row=new tablerow
foreach columnid in chosencolumns
row.add(element[columnid])
table.add(row)
如果每个元素都是一个数组,则columnid是索引,但如果每个元素都是属性名称。
元素[3]比元素['prop3']更快吗?
我制作了一个Beta version here,其元素存储为数组,但我不确定这是否是最佳/最快的方式
编辑:由于项目的性质,元素属性的排序并不重要。 另外:哪种方式会占用更多内存?有些系统将由许多具有许多属性的元素组成,因此内存可能是一个问题: - /
第二次编辑: 如果我使用对象,我还需要为对象创建一个属性名称数组。 因此,如果用户选择将视图包含第13,第2和第4个属性作为第1,2和3列,我将需要为每个元素执行以下操作
row.add(element[propertynames[13]])
row.add(element[propertynames[2]])
row.add(element[propertynames[4]])
然而,如果我选择数组解决方案,我会“保存”属性查找:
row.add(element[13])
row.add(element[2])
row.add(element[4])
答案 0 :(得分:3)
有一些标准可能是 Argument 更喜欢一种数据结构而不是另一种数据结构,但这会导致主观讨论。
但是,你应该问自己最重要的问题是,
您是否需要/希望数据按顺序显示和/或排序?
如果答案是肯定的,那么你应该使用 Array 。对象键按规范无序排序。您当然可以循环和排序键,但同样,它取决于数据的类型以及您希望如何读取它。
如果你使用 Javascript数组(它仍然是一个对象),你绝对不希望通过for..in
循环其内容。这是非功能性循环的最慢可能技术。请改为while
,for
或do-while
。
听起来你在谈论一个真正的大数据量。一般而言,如果可能,您希望避免这种情况。尝试以较小的块读取和传输数据,或者可能流式传输数据可能是更好的选择。此外,如果要转移很多,数据结构将成为一个因素。与对象表示法一样通常更多结构信息而不是简单的 Arrays 。