我托管了一个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;
};
答案 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