从数组模型中转出json数据

时间:2013-07-17 14:26:49

标签: c# javascript arrays asp.net-web-api pivot

我托管了一个web api服务,该服务返回我过去12个月的模型“myModel”的快照。我在客户端收到的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工作示例。它也很快。请注意,每个历史记录必须具有按键分组记录。

  _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;
  };

1 个答案:

答案 0 :(得分:1)

嗯,就超高效而言,我认为除非你改变你的底层模型,否则你将不得不遍历你的模型,无论是服务器端还是客户端,并将每个属性分配给不同的数组。

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

此外,如果您在服务器端代码中对其进行了排序,或者它只是从您从中提取的数据库中自动排序,您将看到速度增加。 Why is it faster to process a sorted array than an unsorted array?

希望这有帮助,fyi,例子是Javascript。

V / R