Javascript 在返回true或false之前遍历集合中的所有值

Javascript 在返回true或false之前遍历集合中的所有值,javascript,html,ecmascript-6,lodash,Javascript,Html,Ecmascript 6,Lodash,我想知道是否有更“实用”的方法来做到这一点。意思是,不必做这样的事情: let flag = true; [1, 2, 3].forEach(n => if (n > 2) flag = false); return flag; 我正在寻找与此更接近的东西: return [1, 2, 3].overEvery(n => n > 2); 我找到的最接近的解决方案是Array.prototype.every函数,但一旦返回false,它就会终止,而不会遍历集合中的其余值

我想知道是否有更“实用”的方法来做到这一点。意思是,不必做这样的事情:

let flag = true;
[1, 2, 3].forEach(n => if (n > 2) flag = false);
return flag;
我正在寻找与此更接近的东西:

return [1, 2, 3].overEvery(n => n > 2);
我找到的最接近的解决方案是
Array.prototype.every
函数,但一旦返回false,它就会终止,而不会遍历集合中的其余值


我不想终止的原因是,我想在表单的onsubmit处理程序中返回true或false之前,遍历表单中的所有字段以显示所有表单错误。

您可以使用,如果您为应该失败的元素返回true,则将返回验证失败的元素

这里是另一种方法:

函数a()
{
var标志=真;
[1,2,3].forEach(函数(值){if(值>2)flag=false;});
返回标志;
}

log(a())您可以执行一个新的原型功能,该功能与每个类似,但会检查所有记录:

if (!Array.prototype.everyCheckAll) {
  Array.prototype.everyCheckAll = function(callbackfn, thisArg) {
    'use strict';
    var T, k;

    if (this == null) {
      throw new TypeError('this is null or not defined');
    }

    // 1. Let O be the result of calling ToObject passing the this 
    //    value as the argument.
    var O = Object(this);

    // 2. Let lenValue be the result of calling the Get internal method
    //    of O with the argument "length".
    // 3. Let len be ToUint32(lenValue).
    var len = O.length >>> 0;

    // 4. If IsCallable(callbackfn) is false, throw a TypeError exception.
    if (typeof callbackfn !== 'function') {
      throw new TypeError();
    }

    // 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
    if (arguments.length > 1) {
      T = thisArg;
    }

    // 6. Let k be 0.
    k = 0;

    // 7. Repeat, while k < len
    var oneFalse = false;
    while (k < len) {

      var kValue;

      // a. Let Pk be ToString(k).
      //   This is implicit for LHS operands of the in operator
      // b. Let kPresent be the result of calling the HasProperty internal 
      //    method of O with argument Pk.
      //   This step can be combined with c
      // c. If kPresent is true, then
      if (k in O) {

        // i. Let kValue be the result of calling the Get internal method
        //    of O with argument Pk.
        kValue = O[k];

        // ii. Let testResult be the result of calling the Call internal method
        //     of callbackfn with T as the this value and argument list 
        //     containing kValue, k, and O.
        var testResult = callbackfn.call(T, kValue, k, O);

        // iii. If ToBoolean(testResult) is false, return false.
        if (!testResult) {
          oneFalse = true;
        }
      }
      k++;
    }
    return !oneFalse;
  };
}

function gt2(element, index, array) {
  return element > 2;
}
document.write([1,2,3].everyCheckAll(gt2));   // false
document.write([4,5,6].everyCheckAll(gt2));   // true
if(!Array.prototype.everyCheckAll){
Array.prototype.everyCheckAll=函数(callbackfn,thisArg){
"严格使用",;
变量T,k;
if(this==null){
抛出新的TypeError('这是null或未定义');
}
//1.让O作为调用ToObject的结果,并传递this
//值作为参数。
var O=对象(此);
//2.让lenValue作为调用Get internal方法的结果
//带参数“length”的O。
//3.将len设为ToUint32(lenValue)。
var len=O.length>>>0;
//4.如果IsCallable(callbackfn)为false,则抛出TypeError异常。
if(callbackfn的类型!=“函数”){
抛出新的TypeError();
}
//5.如果提供了thisArg,则T为thisArg;否则T为未定义。
如果(arguments.length>1){
T=thisArg;
}
//6.设k为0。
k=0;
//7.当k2;
}
document.write([1,2,3].everyCheckAll(gt2));//假的
document.write([4,5,6].everyCheckAll(gt2));//真的
使用,并检查每个数字是否不大于2。Array#every的另一个优点是,每当回调返回
false
,迭代就会停止,并返回结果


const flag=[1,2,3].each((n)=>n
Array.prototype.forEach(函数(项){/*each数组项作为项*/})除了@connexo的建议之外,
Array.prototype.reduce()
可能是一个选项。@ChrisRiebschlager
each()
在第一个假值时立即返回。如果您解释了希望返回值是什么样子,这会有所帮助。您想要布尔数组吗?如果是,很简单:
[1,2,3]。映射(n=>n>2)
如果不是,什么?