javascript中每个和过滤器之间的区别?

时间:2014-01-31 04:05:22

标签: javascript performance

我想知道Array.prototype.everyArray.prototype.filter中的哪些功能在javascript中速度很快? 我知道的区别是每个都可以通过返回false来停止,过滤器不能通过返回false来停止。 除了这个差异还有其他吗? 如果其中哪一个有索引?

3 个答案:

答案 0 :(得分:13)

这些功能完全不同。

Array.prototype.filter将创建一个包含与回调中条件匹配的所有元素的数组

function isBigEnough(element) {
  return element >= 10;
}
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
// filtered is [12, 130, 44]
如果数组中的每个元素都与回调中的条件

匹配,则

Array.prototype.every将返回true

function isBigEnough(element, index, array) {
  return (element >= 10);
}
var passed = [12, 5, 8, 130, 44].every(isBigEnough);
// passed is false
passed = [12, 54, 18, 130, 44].every(isBigEnough);
// passed is true

答案 1 :(得分:0)

Array.prototype.every

确定像a[*] == b[*]这样的数组的所有成员是否满足指定的测试。 (完整的事实)。

Array.prototype.filter

就像测试x exists IN [*]一样 (如果至少有一个匹配的话)

答案 2 :(得分:0)

方法相似之处在于它们遍历数组,并且都采用表示某种“测试”的回调函数。此回调将为数组中的每个元素调用,并且必须返回一个布尔值;这确定元素是否通过测试。

方法的返回类型不同(除其他不同外)。

  • Array.prototype.every返回一个boolean
  • Array.prototype.filter返回一个array

要使用它们的名称,.every()测试每个元素是否通过给定的测试(在回调中指定)。如果一个元素未通过测试,则返回false。如果所有元素均通过测试,则返回true.filter()通过仅包含通过测试的那些元素(实际上将通过的元素放入一个新的数组中)来过滤一个数组。

const numbers = [ 1, 2, 3, 4, 5 ];
function isGreaterThan3 (number) { return number > 3; } // Our "test"
const passedTest = numbers.every( number => isGreaterThan3(number) )
const elementsThatPassedTest = numbers.filter( number => isGreaterThan3(number) ) 

console.log("The array passed the test", passedTest);
console.log("The elements in the array that passed the test", elementsThatPassedTest);

如果测试为isLessThan50(number),则.every()将返回true

关于“索引”,如果您的意思是获取要操作的元素的索引,则every().filter()都使用相同的参数调用回调:

  • 元素
  • 索引
  • 原始数组

const numbers = [ 1, 2, 3, 4, 5 ];
numbers.filter( (element, index, originalArray) => console.log(element, index, originalArray) );