从数组中删除特定项目,未按预期工作

Posted

技术标签:

【中文标题】从数组中删除特定项目,未按预期工作【英文标题】:Deleting specific item from array, not working as intended 【发布时间】:2019-03-30 12:27:48 【问题描述】:

谁能告诉我从数组中删除一个项目有什么问题?在使用 axios.delete 方法的 deleteSingleItemHandler 中,它的工作方式与应有的一样,并且在 firebase 上会完全删除选定的项目,但是当我想从状态数组中删除项目时,它会删除一个项目,但不会删除完全选定的项目,例如,我单击第三个项目,在 firebase 上,它删除了第三个项目,并在我的设备屏幕上删除了第二个项目......我做错了什么?

提前致谢! 干杯

class HistoryScreen extends Component 
  state = 
    orders: []
  ;

  componentDidMount() 
    axios
      .get(".../orders.json")
      .then(response => 
        const fetchedOrders = [];

        for (let key in response.data) 
          fetchedOrders.push(
            ...response.data[key],
            id: key
          );
        

        this.setState( orders: fetchedOrders );

      );
  

  deleteSingleItemHandler = id => 
    axios
      .delete(`...orders/$id.json`)
      .then(response => 
        console.log(response);
      );

    const newArray = [...this.state.orders];
    newArray.splice(id, 1);

    this.setState( orders: newArray );
  ;

  render() 
    return (
      <View style=styles.container>
        <ScrollView>
          <View style=styles.completeOrder>

              this.state.orders.map(order => 
              return (
                <TouchableOpacity
                  key=order.id
                  onPress=() => this.deleteSingleItemHandler(order.id)
                >
                  <View style=styles.singleItem>
                    <View style=styles.orderItem>
                      <View style= flex: 1, marginLeft: 5 >
                        <Text style= fontFamily: Fonts.GloriaHallelujah >
                          order.articleName
                        </Text>
                      </View>

                      <View
                        style=
                          flex: 1,
                          justifyContent: "flex-end",
                          flexDirection: "row",
                          marginRight: 5
                        
                      >
                        <Text>order.articlePrice</Text>
                      </View>
                    </View>
                  </View>
                </TouchableOpacity>
              );
            )
          </View>
        </ScrollView>
      </View>
    );
  

【问题讨论】:

【参考方案1】:

函数Array.prototype.splice的第一个参数是一个索引。

使用函数Array.prototype.findIndex

newArray.splice(newArray.findIndex(o => o.id === id), 1);

或者您可以使用函数 Array.prototype.filter

过滤该对象
newArray = newArray.filter(o => o.id !== id);

【讨论】:

以上是关于从数组中删除特定项目,未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

Django 引导警报未按预期工作

通过 devenv.com 构建设置项目未按预期工作

复制到输出目录未按预期工作

访问 SQL Randomizer 未按预期工作

从 views_php 过滤器返回 TRUE 未按预期工作

针对特定用户的 PostgreSQL RLS 策略未按预期工作并适用于所有用户