【发布时间】:2015-02-25 18:04:50
【问题描述】:
我有一个这样的 JSON 数组:
var jsonArray = [
{ Date: "2010-02-25", Size:"Large", Type:"a", Value: "100"},
{ Date: "2010-02-25", Size:"Medium", Type:"a", Value: "160"},
{ Date: "2010-02-25", Size:"Small", Type:"a", Value: "200"},
{ Date: "2010-02-25", Size:"Large", Type:"b", Value: "400"},
{ Date: "2010-02-25", Size:"Medium", Type:"b", Value: "120"},
{ Date: "2010-02-25", Size:"Small", Type:"b", Value: "170"}
]
我一直在使用 linq.js,我正在尝试操作上面的 JSON,所以 6 个对象变成了 2 个,所以我留下了一个如下所示的数组:
var desiredArray = [
{ Date: "2010-02-25", Large:"100", Medium: "160", Small: "200", Type:"a" }
{ Date: "2010-02-25", Large:"400", Medium: "120", Small: "170", Type:"b" }
]
但这是我第一次使用 linq。我花了很长时间试图弄清楚它,但我真的不知道如何开始。
谁能指出我正确的方向?
任何帮助将不胜感激
【问题讨论】:
-
JSON 是一种字符串格式。您不使用 JSON(字符串)。您使用原生 Javascript 对象。
-
那个 linq 库使用起来很痛苦。你看过可用的测试吗?你可能应该从那里开始,如果你在实施它时遇到困难,你应该回来。过多的魔线对灵魂不利。
-
@TravisJ 有什么好痛的?
-
@JLRishe - 魔术字符串和 eval 的使用(通过 new Function(string)。我必须对其进行测试,但我认为 OrderBy 并没有正确推迟执行。我认为每个单独的方法可能会被延迟执行,但它似乎并没有延迟执行。相反,它在每次传递时组成一个新的 Enumerable,这不是实际的 yield 工作方式。
$的注入使用使代码更难实现,因为它引入通配符的思想。选择需要从字符串创建中注入一个对象,并不是真正的投影。等等等等 -
@TravisJ 您的三点似乎是关于字符串表达式的使用,它们是可选的。 linq.js 支持使用普通函数。我不确定你在其他方面的意思。据我所知,它似乎可以很好地推迟执行:jsfiddle.net/vr46j0vv 每个 IEnumerator 在内部使用一个 Yielder,它是一个可变对象,它遍历值并依次返回每个值。我没有看到每次传递都创建一个新的 Enumerable 。我错过了什么吗?
标签: javascript linq.js