Javascript映射函数正在复制值

Javascript映射函数正在复制值,javascript,react-native,jsx,Javascript,React Native,Jsx,我会很快,我正在使用react native list item组件,它从一个值数组生成项目列表,同时指示键和值,我正在运行javascript map,类似这样的东西 DataManager.ResponseTravelRequestHistory != null ? DataManager.ResponseTravelRequestHistory.slice(-3,-1).map((value,index) => ( <ListItem titleStyl

我会很快,我正在使用react native list item组件,它从一个值数组生成项目列表,同时指示键和值,我正在运行javascript map,类似这样的东西

DataManager.ResponseTravelRequestHistory != null ?
  DataManager.ResponseTravelRequestHistory.slice(-3,-1).map((value,index) => (
    <ListItem
      titleStyle={styles.titleListText}
      subtitleStyle={styles.subtitleListText}
      topDivider={true}
      bottomDivider={true}
      key={index.Id}
      leftIcon={<Image resizeMode={"contain"} width={wp("10.8")} source={images.air_transport}/>}
      title={`${TravelsBusiness.FindCityById(value.Ciudad)}`}
      subtitle={`${Moment(value.FechaSalida).format("DD/MM")} al ${Moment(value.FechaRegreso).format("DD/MM")}`}/>
  ))
  :
  null
DataManager.ResponseTravelRequestHistory!=无效的
DataManager.ResponseTravelRequestHistory.slice(-3,-1).map((值,索引)=>(
))
:
无效的
这是从数组中过滤最后3个项目(除了最后一个),所以问题是,每当我请求旅行时,整个视图都应该重新渲染,并显示我请求的最后一个请求,这是可行的,但问题是,当我第二次请求时,最后一个被复制,所以结果是这样的

如果我关闭应用程序或关闭会话,数据会正确显示,可以使用reverse.slice()进行尝试,但效果似乎更差


编辑:解决了!复制是在datamanager中进行的,原因是lastobject是historyobject列表的一部分,每次我做一个新请求时,lastobject都会在historyobject中复制,有点令人困惑,但由于主要问题与listitem不完全相关,我想共享此信息,很抱歉给您带来不便

您的意思是使用
key={value.Id}
而不是
key={index.Id}
。因为我相信这是造成您的问题的原因。

您的意思是使用
key={value.Id}
而不是
key={index.Id}
。因为我认为这是导致您出现问题的原因。

array.slice(-3,-1)从末尾开始提供2个元素,不包括最后一个元素。例如,如果有这样的数组a=[0,1,2,3,4],它将返回[2,3]

另外,如果你说,如果你重新启动应用程序,数据会正确显示,我很确定你的数组是重复的,你应该记录下来看看里面有什么,然后确定重复发生的位置。

array.slice(-3,-1)从最后一个元素开始给你2个元素,不包括最后一个元素。例如,如果有这样的数组a=[0,1,2,3,4],它将返回[2,3]


另外,如果你说,如果你重启应用程序,数据会正确显示,我很确定你的数组是重复的,您应该将其记录下来,以查看其中的内容,然后确定复制发生的位置。

您是否绝对肯定重复项不在数据管理器中。ResponseTravelRequestHistory?因为
.map()
绝对不会复制任何内容。事实并非如此,因为当我从此帐户注销并返回此屏幕时,一切正常。您是否绝对肯定重复项不在
数据管理器中。ResponseTravelRequestHistory
?因为
.map()
绝对不会复制任何内容。事实并非如此,因为当我从该帐户注销并返回此屏幕时,一切都正常“array.slice(-3,-1)从结尾处为您提供2个元素,不包括最后一个。”这正是我正在寻找的,也正是我正在做的,事情是,我第二次做请求,是在最后一个项目被复制的时候,“array.slice(-3,-1)从末尾给你2个元素,不包括最后一个。”这正是我正在寻找的,也正是我正在做的,问题是,我第二次做请求,是在最后一个项目正确地得到重复的声音的时候
index.Id
未定义,因此每个ListItem将具有相同的键(OP应在控制台中看到关于此的警告)“警告:遇到两个具有相同键的子项,键应唯一,以便组件保持其标识”,我收到了这个警告,还有同样的副本issue@NicolasSilva您的对象上是否确实有一个
Id
字段,并确保这些Id是唯一的。我刚刚发现一件事,重复发生在datamanager本身,这是由于javascript在插入之前没有清理数据,这给我带来了一些大问题听起来不错
index.Id
未定义,因此每个ListItem将具有相同的键(OP应在控制台中看到关于此的警告)“警告:遇到两个具有相同键的子项,键应唯一,以便组件保持其标识”,我收到了这个警告,还有同样的副本issue@NicolasSilva您的对象上是否确实有一个
Id
字段,并确保这些Id是唯一的。我刚刚发现一件事,重复发生在datamanager本身,这是由于javascript在插入之前没有清理数据,这给我带来了一些大问题