我托管了一个网络 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。
又是这样。我的问题是,是否有一种 super 有效的方法可以在 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;
};
最佳答案
嗯,就超高效而言,我认为除非你改变你的底层模型,否则你将不得不遍历你的模型,无论是服务器端还是客户端,并将每个属性分配给不同的数组。
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?
希望这对您有所帮助,仅供引用,示例是 Javascript。
V/R
关于c# - 从模型数组中透视 json 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17702487/