我想知道Array.prototype.every
和Array.prototype.filter
中的哪些功能在javascript中速度很快?
我知道的区别是每个都可以通过返回false来停止,过滤器不能通过返回false来停止。
除了这个差异还有其他吗?
如果其中哪一个有索引?
答案 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)
确定像a[*] == b[*]
这样的数组的所有成员是否满足指定的测试。
(完整的事实)。
就像测试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) );