【发布时间】:2016-12-07 21:01:14
【问题描述】:
我有以下格式的数据action.places。
我只想将它与传入的新数据结合起来,并返回更新地点的新地图。如果我得到一个地点对象并且其中一个地点与前一个地点具有相同的纬度/经度,我不想附加该数据。
{
places: [
{
place: {
lat: 123,
lon: 321,
}
},
{
place: {
lat: 432,
lon: 234,
}
},
]
}
我将如何使用地图执行此操作?目前我正在以这种方式添加,但所有内容都是重复的,我找不到非混乱的解决方案:
case RECEIVE_PLACES:
return state
.set('places', state.get('places').update(fromJS(action.places)))
理想情况下,我会将每个 obj 的键设置为 [${lat},${lon}](唯一标识地点的方式),这样我只需遍历键即可获得我的地点。
【问题讨论】:
-
基于此描述,我认为您应该考虑使用
Set而不是List来存储“地点”。 -
我使用的是
Map。 @Josep - 我更新了问题。 -
不,你不是。你在顶层,但是“places”是一个列表,这是因为
fromJS默认情况下会将一个数组转换为一个列表。 -
嗯,从这个意义上说是的,然后是的 - 我想占据每个地方并将其添加到地图中,使用 lat/lon 的组合作为每个地方的键。
-
我的建议是,如果不使用
List来存储您使用Set的地方,您就不会遇到这个问题,因为它不允许重复存在。有两种方法可以实现这一点,通过使用fromJS函数的其他参数,以便它进行您想要的转换,或者您手动进行。如果你愿意,我可以在答案中给你那个代码。你有兴趣还是不想要一套?我的意思是,如果项目的顺序与你无关,你真的应该使用 Set :-)
标签: javascript reactjs redux immutability immutable.js