条件数据结构(对象)访问

时间:2017-01-01 18:40:09

标签: javascript

我有一组处理某些对象的JavaScript函数。所有这些对象都具有以下灵活性:

  • 可以像这样访问字段:data[prop][sub-prop][etc.],或者
  • 像这样(带有类型子结构):data[TYPE][prop][sub-prop][etc.]

在很多地方都可以访问该对象,条件(让我们称之为is_mixed)无处不在。

我想到了以下替代方案:

  1. 始终如此访问data(is_mixed ? data[TYPE] : data)[prop][sub-prop][etc.]
  2. 拥有一个名为getData的函数,并始终像data一样访问getData()[prop][sub-prop][etc.]function getData() { return is_mixed ? data[TYPE] : data; }。 功能代码为:

    if (is_mixed) { data = data[TYPE]; }

  3. 对每个新输入运行以下内容:int max = 5; //the fixed size of your array. int[] inArray = new int[5] {0,0,0,0,0}; //initial values only. void putValueToArray(int thisData) { //let's do the magic here... Array.Copy(inArray, 1, inArray, 0, max-1); inArray[max-1] = thisData; }

  4. 在我看来,选项2和3可能是复制对象数据(可能很大)并且性能在这里很重要(我没有找到支持这种猜测的文献),但是选项1将会生成代码又大又丑。

    有更好的选择吗?在性能,代码质量和基本最佳实践方面实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

  

在我看来,选项2和3可能正在复制JSON内容

不,他们不会。它们都只是复制一个对象引用,它快速而便宜(比如复制一个布尔值)。 #2当然是略微慢,因为它是一个函数调用,但如果它使用了很多,那么任何体面的JavaScript引擎都会内联函数,给你带来的好处源级的模块化。 (但是在短时间内可以花费数千次调用函数来实现这一功能;例如,现代引擎只有在看起来很重要时才会优化。)