JS有什么办法可以快速找出数组里是否有某个值?
这是我常用的方法,感觉好累赘,有没有社么好办法?

function contains(arr, val) {
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] === val) {
            return true;
        }
    }
}

···回复:

jsfunction contains(arr, val) {
  if (arr.indexOf(val) !== -1) {
    return true;
  } else {
    return false;
  }
}

···回复:

var arr = [1, 2, 3, 4, 5, 6, 7];    // array
var wanted = 8;    // any value you want to check

// console.log `true` if found, otherwise `false`
// Browser compatibility: IE9+
console.log(arr.some(function(item) { return item === wanted; }));

// console.log `index` of the value if found, otherwise -1.
// Browser compatibility: IE9+
console.log(arr.indexOf(wanted));

···回复:

Array.prototype.in_array = function(search) {
    for(i=0; i<this.length; i++) {
        if(this[i]==search) {
            return true;
        }
    }
    return false;
}

给Array增加一个原型方法,这样所有的数组都通用了,和原生的一些通用Array方法都通用了


···回复:

jsArray.prototype.includes()

好吧,这是一个Harmony (ECMAScript 7) proposal。

Polyfill:

jsif (![].includes) {
  Array.prototype.includes = function(searchElement /*, fromIndex*/ ) {
    if (this === undefined || this === null) {
      throw new TypeError('Cannot convert this value to object');
    }
    var O = Object(this);
    var len = parseInt(O.length) || 0;
    if (len === 0) {
      return false;
    }
    var n = parseInt(arguments[1]) || 0;
    var k;
    if (n >= 0) {
      k = n;
    } else {
      k = len + n;
      if (k < 0) k = 0;
    }
    while (k < len) {
      var currentElement = O[k];
      if (searchElement === currentElement ||
         (searchElement !== searchElement && currentElement !== currentElement)) {
        return true;
      }
      k++;
    }
    return false;
  }
}

参考链接:
MDN – Array.prototype.includes()

 


···回复:

可以用数组的some方法:

语法

array.some(function(currentValue,index,arr){ ...someCode })
  • currentValue:必选。当前元素。
  • index:可选。当前元素索引值。
  • arr:可选。当前元素所属的数组对象。

用途

遍历数组中每个元素,判断其是否满足指定函数的指定条件,返回true或者false

  • 如果一个元素满足条件,返回true,且后面的元素不再被检测
  • 所有元素都不满足条件,则返回false
  • 不会改变原始数组
  • 不会对空数组进行检测;数组为空的话,直接返回false

实例

判断数组中是否含有“10”

const arr = [2,5,45,7,8,35];
arr.some( item =>{
    item == 10
})
//false

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Scroll Up