时常用到一些循环判断对比,想的最多的是for循环,后端返回的geneList是有几千条gene一维数组,数据结构为list:[gene1,gene2,gene3,…]
,添加功能时不愿意改结构,response里增加了个list1:[gene2,gene8]
这样的两对数据,进行循环对比,使同时存在于数组1和数组2数据的加上特殊颜色标识,for循环嵌套在dom里走不通,要实现得用钩子函数重构数组
无对比遍历代码(基于elementui,仅遍历arrayA) :
<span v-for="(i, index) in arrayA" :key="index">
{i}
</span>
如果用for循环比对,很麻烦,要多增加很多代码量,js里有个array.indexOf(‘a’),来查询字符串对应索引
例子:
var array = \[1,2,3,4\];
alert(array.indexOf(3)); // 2 得到索引
alert(array.indexOf(5)); // -1
indexOf的代码:
<span v-for="(i, index) in arrayA" :key="index">
<span :class="{'color_red': arrayB.indexOf(i) != -1, '': arrayB.indexOf(i) == -1}">{{ i }}</span>
or
<span :class="{arrayB.indexOf(i) != -1 ? 'color_red': ''}">{{ i }}</span>
</span>
然而,也可以通过Vue的过滤器来搞定:
dom:
<span v-for="(i, index) in arrayA :key="index" :class="i | hasName(arrayB) ? 'color_red': ''">
{i}
</span>
script:
filters: {
hasName (data, param) {
let isOK = false
for (let i in param) {
if (param\[i\] == data) {
isOK = true
break
}
}
console.log(isOK)
return isOK
}
}