JavaScript中.reduce()和.every()的区别

JavaScript中.reduce()和.every()的区别,javascript,reactjs,lodash,Javascript,Reactjs,Lodash,我正试图检查每个对象是否存在o_u。我用.every()来做这件事。我们能用.reduce()来做吗?这两者的性能比较是什么 const obj = level1.level2[level1.ID][P1]; checker = ['o_1', 'o_2', 'o_3', 'o_4'].every(key => obj[key] === undefined); .every()如果此数组中的每个元素都满足提供的测试函数,则返回布尔值-true。.every()的一个重要区别是,可能并不

我正试图检查每个对象是否存在
o_u
。我用
.every()
来做这件事。我们能用
.reduce()
来做吗?这两者的性能比较是什么

const obj = level1.level2[level1.ID][P1];
checker = ['o_1', 'o_2', 'o_3', 'o_4'].every(key => obj[key] === undefined); 
.every()
如果此数组中的每个元素都满足提供的测试函数,则返回布尔值-true。.every()的一个重要区别是,可能并不总是为数组中的每个元素调用test函数。一旦测试函数为任何元素返回false,就不会迭代更多的数组元素。因此,测试功能通常应该没有副作用

.reduce()
reduce()方法对数组的每个元素执行一个reducer函数(您提供的),从而产生一个单一的输出值。

。如果此数组中的每个元素都满足提供的测试函数,则every()
返回布尔值-true。.every()的一个重要区别是,可能并不总是为数组中的每个元素调用test函数。一旦测试函数为任何元素返回false,就不会迭代更多的数组元素。因此,测试功能通常应该没有副作用

.reduce()
reduce()方法在数组的每个元素上执行一个reducer函数(您提供的),从而产生一个单一的输出值。

大多数(如果不是全部)JavaScript的高阶数组方法都可以使用
.reduce()
实现,但是,它们之间可能存在差异。在这种情况下,
.every()
方法一旦发现谓词(即回调)返回false,就会立即
返回false
。这允许
.every()
提前终止其迭代。但是,
.reduce()
没有这种提前终止功能,因此,一旦回调返回
false
,它将继续检查数组中的所有其他剩余值

例如,一旦
n<3
false
,以下内容将停止比较元素:

const arr=[1,2,3,4,5];
常数小于三=arr.every(n=>{
console.log(“为“+n执行”);//不为4或5执行,因为我们已经知道当'n'为3时结果为false
返回n<3
});
console.log(比三个小)
大多数(如果不是全部的话)JavaScript的高阶数组方法都可以使用
.reduce()
实现,但是,它们之间可能存在差异。在这种情况下,
.every()
方法一旦发现谓词(即回调)返回false,就会立即
返回false
。这允许
.every()
提前终止其迭代。但是,
.reduce()
没有这种提前终止功能,因此,一旦回调返回
false
,它将继续检查数组中的所有其他剩余值

例如,一旦
n<3
false
,以下内容将停止比较元素:

const arr=[1,2,3,4,5];
常数小于三=arr.every(n=>{
console.log(“为“+n执行”);//不为4或5执行,因为我们已经知道当'n'为3时结果为false
返回n<3
});

console.log(比三个小)
vs您可能可以使用
reduce()
执行此操作,但是
every()
将在谓词第一次失败时停止迭代,而
reduce()
将继续迭代每个值。您当然可以使用
reduce()
执行此操作,但是,即使在第一个元素处发现缺少的
o
,它也会通过整个数组,而
every()
在出现故障时会立即短路,因此执行速度要快得多。vs您可能可以使用
reduce()
执行此操作,但是
every()
将在谓词第一次失败时停止迭代,而
reduce()
将继续迭代每个值。您当然可以使用
reduce()
执行此操作,但是,即使在第一个元素处发现缺少的
o
,它也会通过整个数组,而
every()
在出现故障时会立即短路,因此执行速度要快得多。