JavaScript迭代与过滤器映射

时间:2016-12-17 19:45:14

标签: javascript

我想知道它之间的区别:

function doesCodeExist(arrvalidcodes, code) {

  var hit = arrvalidcodes.filter(function(item){
    return (code === item)
  }).map(function(item){
    return true;
  });
  if (hit[0] === true) {
    return true;
  } else {
    return false;
  }
}

和此:

function doesCodeExist(arrvalidcodes, code) {

  for (var i = 0; i < arrvalidcodes.lenght; i++) {
    if (arrvalidcodes[i] === code) {
      return true;
    }
  }
  return false;
}

两个代码应该做同样的事情,如果代码在提供的数组中,则返回true或以其他方式返回false

哪种被认为最具可读性,哪种更有效?

2 个答案:

答案 0 :(得分:2)

当然你的第一个代码更糟糕,因为它分配了各种无用的数组并且不可读。

如果您需要语义ES5数组方法,请使用some

function doesCodeExist(arrvalidcodes, code) {
  return arrvalidcodes.some(function(item){
    return code === item;
  });
}

当然,对于严格的比较,你应该使用indexOf,或者你想要一个SameValueZero比较用includes

答案 1 :(得分:1)

您可以使用Array#indexOf

  

indexOf() 方法返回可在数组中找到给定元素的第一个索引,如果不存在则返回-1

function doesCodeExist(arrvalidcodes, code) {
    return arrvalidcodes.indexOf(code) !== -1;
}

或使用ES6使用Array#includes