方式一
利用循环,这种方式是比较老的实现方案,但是不可否认的是在浏览器中效率较高。
function contains(arr , val) {
for(var i = 0; i<arr.length; i++){
if(arr[i] === val){
return true;
}
}
return false;
}
contains([1,2,3],3);//true
或者使用while方法
function contains(arr , val){
var i = arr.length;
while(i--){
if(arr[i] === val){
return true;
}
}
return false;
}
方法二
使用some方法更简洁,一旦找到元素,迭代就会中止,从而避免了不必要的迭代周期。
function contains(arr , val){
return arr.some(item => item === val);
}
使用filter(注意:array.filter(item => item ==x).length > 0 等效于array.some(item => item ==x)但some更有效)
function contains(arr, val){
return arr.filter(item => {return item == val}).length > 0
}
方式三
array.indexOf,此方法判断数组中是否存在某个值,如果存在返回数组元素下标,否则返回-1。
[1,2,3].indexOf(1); //0
['foo','fly63','baz'].indexOf('fly63'); //1
[1,2,3].indexOf(4); //-1
方法四
array.include(searchElement,[fromIndex])此方法判断数组中是否存在某个值,如果存在返回true,否则返回false。
[1,2,3].includes(2); // true
[1,2,3].includes(4); // false
它还接受可选的第二个参数fromIndex:
[1,2,3].includes(3,3); // false
[1,2,3].includes(3,-1); // true
方式五
array.find; find方法返回数组中满足条件的第一个元素的值,若没有则返回undefined。例如:
let arr = [2,4,68,100];
let A = arr.find(v=>v>50);
console.log(A) //A=68
let partnerAll = [{ description: "斑马",id: "49",short_name: "斑马鱼"}]
<el-table-column >
<template slot-scope="scope">
<span v-if="partnerAll.find(v=>v.id === scope.row.partner_id)">
{{partnerAll.find(v=>v.id === scope.row.partner_id).short_name}}
</span>
</template>
</el-table-column>
console.log(A) //斑马鱼
注意:1、find方法不会改变原数组,2、fing方法对于空数组函数是不会执行的,3、find方法需要传一个函数做为参数
方式六
set中的has方法
function contains(arr, val){
return new Set(arr).has(val)
}
contains([1,2,3],2); // true
通过new set([])将数组转换成Set对象,set.prototype.has(value)判断该值是否存在于Set对象中,返回布尔值,(可以利用它去重)
lat arr2 = new Set([1,1,2,3,4])
let arr3 = [...arr2]
console.log(arr2,arr3) // {1,2,3,4} [1,2,3,4]