vue中includes失效问题,怎么解决?

图片.png
图片.png

<el-tab-pane label="KYC标签" name="first">
                    <template v-for="item in labelList">
                        <div class="title" :style="labelList[0] ? '' : 'margin-top: 12px;'">{{item.name}}</div>
                        <div class="qian">
                            <div class="tag">
                                <span class="Classification"
                                v-for="(k, index) in item.detailArr"
                                :key="index"
                                :class="{active : tabIndex.includes(k) }"
                                @click="oncheck(k)">
                                    {{k.name}}{{tabIndex.includes(k)}}</span>
                            </div>
                        </div>
                    </template>
                </el-tab-pane>

oncheck(item){

        if (this.tabIndex.includes(item)) {
            //includes()方法判断是否包含某一元素,返回true或false表示是否包含元素,对NaN一样有效
            //filter()方法用于把Array的某些元素过滤掉,filter()把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素:生成新的数组
            this.tabIndex = this.tabIndex.filter(function(ele) {
                return ele != item
            })
        } else {
            this.tabIndex.push(item)
        }
    },
阅读 4.3k
2 个回答

猜测你的 tabIndex 是一个对像数组,使用 includes 去匹配的时候不会认为是同一个的。

添加的时候还会因为是浅拷贝只是拷贝了内存地址的指向,所以可以匹配上,
如果后续回填的时候是分别填入的,那么就不会被认为是同一个。

一个演示代码:

const a = {}
const b = {}
console.log('a === b', a === b) 
console.log('a == b', a == b) 
// a === b false
// a == b false

console.log('a === a', a === a) 
console.log('a == a', a == a) 
// a === a true
// a == a true

所以最好在一些例如说元素激活的时候,最好是把元素的唯一 key 收集起来,在判断中使用key 键去匹配。
比如说

const activeKeys = ['key1', 'key2'];
activeKeys.includes(item.key)
````

把includes里的k对象改成以对象中的id做对比(k.id)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题