Splice仅删除数组中的最后一个元素

时间:2015-11-21 14:56:19

标签: javascript flux alt immutable.js

我对React有一个小问题(仍然是新手)。我有一系列的结果。这些结果有嵌套的Bookings,也在数组中,后者就是我正在操作的。

当用户创建预订时,一切都按预期进行 - findIndex获取正确的Result元素并相应地修改其预订数组。

但是,当我想要“取消预订”时,它只会找到数组中的最后一个结果,而findIndex始终是-1(所以我甚至没有进入预订部分,因为我得到的结果索引是错误的。)

代码类似,我的项目都有唯一的密钥,我不明白可能是什么问题(使用Alt作为Flux实现)?

创建时会发生以下情况:

onCreateBookingSuccess(data) {
    let resultIndex = this.results.findIndex((result) => result.id === data.id);
    this.results.update(resultIndex, (result) => result.bookings.push(data));
    toastr.info('Booked! User will receive notification.');
  }

关于删除:

onDestroyBookingSuccess(data) {
    let resultIndex = this.results.findIndex((result) => result.id === data.id);
    var myBooking;
    this.results.map((result) => {
      myBooking = result.bookings.findIndex((booking) => booking.id === data.booking);
    });
    this.results.update(resultIndex, (result) => result.bookings.splice(myBooking,1));
    toastr.warning('Unbooked! User will receive notification.');
  }

我的对象:

<Result key={result.id} id={result.id} bookings={result.bookings} />

正如我所提到的,第一个操作按计划进行,一切都按照应有的方式进行修改。第二个操作系统的问题从一开始就开始,resultIndex返回-1

1 个答案:

答案 0 :(得分:0)

问题似乎在这里:

var myBooking;
this.results.map((result) => {
  myBooking = result.bookings.findIndex((booking) => booking.id === data.booking);
});

总是分配给myBooking,即使在找到索引后找不到索引(-1),也等同于{{1} }。你真的只想获得不是this.results.last().bookings.findIndex(...)

-1

另外,考虑重命名var myBooking = this.results.map((result) => { myBooking = result.bookings.findIndex((booking) => booking.id === data.booking); }).find((index) => index != -1); 以更好地表明它是索引而不是实际记录。