2

我托管了一个 web api 服务,它返回我的模型“myModel”过去 12 个月的快照。我在客户端收到的 json 数组是一个包含 12 个“myMydel”对象的简单数组。

如果 myModel 具有属性“foo”和“bar”,javascript 中是否有一种有效的方法来旋转数组以生成属性数组的集合,例如:

我想改造

history{
  myModel[]
     myModel[0]
       foo: 1
       bar: 2
       Key: 1
     myModel[1]
       foo: 3
       bar: 4
       Key: 1
 }

进入

history{
    "1"{  //key
      foo[] 
        foo[0]: 1
        foo[1]: 3
      bar[]
         bar[0]: 2
         bar[1]: 4
      }
  }

如果这样更有效,我愿意在服务器端实施。我的 api 服务是一个 .NET 4.5 Web Api。

再说一遍。我的问题是,有没有一种超级有效的方法可以在 javascript 中实现这些结果?如果没有,c#中是否有一个?有人可以提供一些简单的示例代码来帮助我吗?

非常感谢您的帮助。谢谢!

编辑:工作代码

即使我被否决了,我想我会提供一个实现这一目标的 javascript 工作示例。它也非常快。请注意,每个历史记录都必须有一个 Key 来对记录进行分组。

  _pivot = function(history) {
    var i, pivoted, prop, rec;
    pivoted = {};
    if (history !== null) {
      i = 0;
      while (i < history.length) {
        rec = history[i];
        pivoted[rec.Key] = pivoted[rec.Key] || {};
        for (prop in rec) {
          pivoted[rec.Key][prop] = pivoted[rec.Key][prop] || [];
          if (!pivoted[rec.Key][prop].date) {
            pivoted[rec.Key][prop].push({
              value: rec[prop]
            });
          }

        }
        i++;
      }
      return pivoted;
    }
    return null;
  };
4

1 回答 1

1

好吧,就超级高效而言,我认为除非您更改下属模型,否则您将不得不迭代您的模型,无论是服务器端还是客户端,并将每个属性分配给不同的数组。

var tempFoo = newArray(); tempBar = newArray();
for (var i = 0; i < myModel.length; i++){
    tempFoo.push(myModel[i].foo);
    tempBar.push(myModel[i].bar);
}

此外,如果您在服务器端代码中对其进行了排序,或者如果它只是从您从中提取的任何数据库中自动排序,您将看到速度提高。为什么处理排序数组比处理未排序数组更快?

希望这会有所帮助,仅供参考,示例是 Javascript。

视听/视听

于 2013-07-17T14:47:12.597 回答