6种JS判断数组是否包含某个值得方法

567 阅读2分钟

方式一

利用循环,这种方式是比较老的实现方案,但是不可否认的是在浏览器中效率较高。

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]