我在grails中有以下控制器操作,以确定某个项目是否在我的购物车中
def itemInCart(){
def cartHasItem = false
def product = Product.findOrCreateByPartNumberAndColor(params.partNumber, params.color)
def cart = shoppingCartItems()
cart.each() { item ->
if (item['partInfo']['partNumber'] == params.partNumber && item['partInfo']['color']==params.color){
cartHasItem = true
}
}
render(cartHasItem)
}
我在购物车中添加了一个项目
cart.each()
时的购物车
[{partInfo={partNumber=69874, color=BLACK}, qty=1, price=16.99}]
params.partNumber = 69874
params.color = BLACK
问题是我的代码完全跳过了each()块。 debug hits cart.each() { item ->
然后直接渲染
答案 0 :(得分:4)
您希望在此处使用any
代替each
:
def cartHasItem = cart.any{ item ->
item['partInfo']['partNumber'] == params.partNumber && item['partInfo']['color']==params.color
}
答案 1 :(得分:0)
我想扩展@Dónal对这个问题的评论,找出为什么每个()vs每个都不同。
我从未使用过object.each(){},而是总是使用这种形式:
cart.each { item ->
// do work
}
但是,在这个简单的测试中,我实际上无法使每个()失败:
def myfn() {
def items = [1,2,3]
def ret = false
items.each() {item -> if (item == 2) { ret = true }}
return ret
}
myfn()
==> true
我尝试使用地图来表示您正在使用的数据的更复杂的版本,以及使用
的简单版本[[a:1, b:2, c:3]].each() { println it }
总是呈现项目的。
你使用的是什么版本的groovy?
我假设你的数据实际上是这里的地图列表,你的项目语法比groovy更具有语法性。