鍍金池/ 問答/HTML/ 如何用vue通過for的循環(huán)下標(biāo)一次刪除多個(gè)數(shù)據(jù)

如何用vue通過for的循環(huán)下標(biāo)一次刪除多個(gè)數(shù)據(jù)

初學(xué)vue,嘗試制作一個(gè)tudolist的小工具,使用localStorage來緩存之前的記錄。
然后做了一個(gè)刪除已完成的功能,使用下標(biāo)來選擇被選中的數(shù)據(jù)。但是遇到一個(gè)問題,如果我在循環(huán)中判定被選中,然后根據(jù)下標(biāo)刪除。使用this.li.splice()方法時(shí),每次刪除都會(huì)改變下標(biāo),會(huì)導(dǎo)致多個(gè)刪除錯(cuò)誤。后來我使用另一個(gè)數(shù)組存儲(chǔ)被選中的數(shù)組,然后使用splice($inArray(i,this.li),1)這樣來實(shí)現(xiàn),也發(fā)現(xiàn)一個(gè)致命問題,如果有相同的內(nèi)容,就無法準(zhǔn)確定位。最后使用了delete方法,先將值置空,然后在設(shè)置循環(huán)來刪除空值。
說了這么多我想問有沒有比較直接的方法來刪除被選中的元素,還有希望大家給我解答一個(gè)問題。如果說vue目的是使用數(shù)據(jù)來控制顯示,那么是否遇到類似的問題都需要遍歷來實(shí)現(xiàn)嗎?有沒有一種類似于jq可以選中this的方法。
下面貼下代碼

HTML部分代碼

<li v-for="(i,index) in li"
        class="list"
        :class="{'active':color[index]}">
        <div class="lists">
                <span>
                    {{i}}
                </span>
        </div>
        <div @click="check(index,i)" class="end">
                <span >
                    {{ms[index]?a:b}}
                </span>
        </div>
 </li>

## js部分代碼 ##
            

這是之前的想法,有這重復(fù)出錯(cuò)的錯(cuò)誤

            /* var val=[];
            for (var i in this.color){
                if (this.color[i]==true||this.color[i]=="true"){
                    console.log(i)
                    val.push(this.li[i])
                }
            }
            for (var i=0;i<val.length;i++){
                this.li.splice($.inArray(val[i],this.li),1);
                console.log(val[i])
            }
            this.color=[];
            localStorage.setItem("localname",this.li);
            localStorage.removeItem("localcolor");
            this.ms =[];
            this.s = []*/

這是更新以后應(yīng)該不會(huì)出錯(cuò)的代碼

            for (var i in this.color){
                if (this.color[i]==true||this.color[i]=="true"){
                    delete this.li[i]
                }
            }
            for (var i=0;i<this.li.length;i++){
                if (this.li[i]==''||this.li[i]==undefined){
                    this.li.splice(i, 1);
                    i-=1;
                    console.log(this.li)
                }
            }
            this.color=[];
            localStorage.setItem("localname",this.li);
            localStorage.removeItem("localcolor");
            this.ms =[];
            this.s = []*/

            
           
回答
編輯回答
編輯回答
憶當(dāng)年

從最后開始遍歷,滿足條件的刪除(從后往前刪)

2017年4月12日 02:20
編輯回答
北城荒

你可以換個(gè)思路 把不刪的數(shù)據(jù)拿出來放到一個(gè)新數(shù)組里去 不就完了嗎

2017年10月16日 17:16
編輯回答
毀與悔

你可以給你渲染的數(shù)據(jù)加一個(gè)數(shù)據(jù)isFlag:true,為false時(shí)表示被刪除,當(dāng)你點(diǎn)擊的時(shí)候,此時(shí)這個(gè)的isFlag=!isFlag,刪除的時(shí)候?qū)sFlag屬性為false的數(shù)據(jù)給刪除就可以了

2018年5月16日 21:55
編輯回答
壞脾滊
this.li = this.li.filter((_, i) => String(this.color[i]) != 'true')
2017年4月14日 02:01