拥有以下对象数组:
obj = [
column:
label: "Name"
value: "name"
operator:
label: "Greater than"
value: "_greater_than"
input_value: "foo"
... ]
然后我可以构造另一个用作URL参数的对象,如下所示:
query = {}
angular.forEach(obj, (k, v) ->
query = ["c[" + k.column.value + k.operator.value + "]=" + k.input_value]
)
这会返回如下内容:
[ “C [name_greater_than] = foo” 的]
虽然这样做意味着我觉得这个代码有点(非常?)脏,所以有没有办法让这条线更优雅或更有效?
query = ["c[" + k.column.value + k.operator.value + "]=" + k.value]
答案 0 :(得分:0)
由于两个原因,您的angular.forEach
来电没有意义:
obj
只显示为单个对象,因此迭代器没有任何内容。angular.forEach
在迭代对象时将回调值传递给键,但参数为(k, v)
。基于此,我猜测obj
实际上是一个对象数组,看起来像问题顶部的obj
。
在这种情况下,你可以使用一个简单的循环:
query = { }
for e in objs
query["#{e.column.value}#{e.operator.value}"] = e.value
如果query = { }
冒犯了您,请使用reduce
:
query = objs.reduce(
(q, e) -> q["#{e.column.value}#{e.operator.value}"] = e.value; q
{ }
)
你可能想这样写:
query = objs.reduce(
(q, e) ->
q["#{e.column.value}#{e.operator.value}"] = e.value
q
{ }
)
如果您不习惯谨慎关注reduce
回调的返回值。