zoukankan      html  css  js  c++  java
  • 数组循环删除数据时,splice使用注意

    当在循环数组中,删掉某个元素的时候,不要使用splice方法。

    因为splice会使原数组发生变化,而此时数组还处在循环中,所以会出现问题。

    例子:

    有个数组  formData ,需求:删除formData的itemList中,queId === ‘001’的一项。

    我最开始使用的是splice方法,但是报错了:

    for(let i = 0; i < this.formData.itemList.length; i++) {
        let item = this.formData.itemList[i]
        if (item.queId === '001') {
            this.formData.itemList.splice(i, 1)
         }
     }

    遇到有需要循环数组来删除数组数据的情况,这样做:

    let formArr = []
    for(let i = 0; i < this.formData.itemList.length; i++) {
        let item = this.formData.itemList[i]
        if (item.queId !== '001') {
            formArr .push({...item})
         }
     }
    最后得到的formArr 就是删掉那个数据的数组

    解释 formArr.push({...item}) 
    这里是{...item}的意思是将item复制了一份,传给formArr,因为之后formArr可能会对item有所操作,如果是直接push item的话,跟之前的item的引用地址是一样的,可能会出现问题。嗯。
    注意,这个复制是item只有一层的时候。如果不止一层,需要用cloneDeep
  • 相关阅读:
    淘宝技术架构演进之路
    单点登录
    [c++11] ——条件变量(Condition Variable)
    std::lock_guard unique_lock
    C++中push_back和emplace_back的区别
    C++11 CAS无锁函数compare_exchange_weak的使用
    C++11新特性之 rvalue Reference(右值引用)
    C++ auto和decltype的区别
    ovs contrack
    周总结03
  • 原文地址:https://www.cnblogs.com/benbendu/p/9087577.html
Copyright © 2011-2022 走看看