JavaScript:仅当数组中的所有项都为true时才执行函数?

JavaScript:仅当数组中的所有项都为true时才执行函数?,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有以下代码: // Required fields is an array of objects required_fields.each(function() { // Check each field: If it has no value, do nothing. if( !$(this).val() ) { return false; } // If all the fields are there, do something. else {

我有以下代码:

// Required fields is an array of objects

required_fields.each(function() {

  // Check each field: If it has no value, do nothing.
  if( !$(this).val() ) {
    return false;
  }

  // If all the fields are there, do something.
  else {
    alert('Doing something.');
  }

});
我相信你能看到问题所在。在中包含警报。每个函数都会导致为数组中的每个项触发警报。但我只想在所有数组项都有一个值的情况下触发事件,也就是说,如果没有返回false


只有当所有数组项都通过时,才触发某些内容的正确方法是什么?

只需为每个值实现一个小计数器

var valueCount = 0;

required_fields.each(function () {
  if (!$(this).val()) {
    return false;
  } else {
    valueCount++; // increment to say has value
  }

});

if (valueCount == required_feilds.length) {
  alert('Doing something.');
}
您可以使用在返回falsy值时短路的:

var isTrue = [].every.call(required_fields, function(el) {
  return $(el).val();
});

if (isTrue) {
  console.log('Doing something');
}
我不认为你有一个数组,而是一个jQuery对象,它是一个数组,类似于get length和0,1。。。属性,以便通过使用.call设置上下文来滥用本机阵列原型:


现在我想到了jQuery.fn。如果返回false,则每个jQuery.fn都会短路。

有两个主要选项: 1:编写一个简单函数,该函数接受jQuery对象数组,如果数组中的所有项都有值,则返回true

var allHaveValue = function(array){
    for(var i = 0; i < array.length; i++){
        if(!$(array[i]).val()){
            return false;
        }
    }
    return true;
};

// For your example
if(allHaveValue(required_fields)){
    // Proceed
} else{
    // Handle errors   
}

“您保持return false的原因是短路。@andlrc我知道,谢谢。”。我一编辑就意识到了这一点,因为我的评论太少了。不过还是要感谢你的提醒!
var allHaveValue = function(array){
    for(var i = 0; i < array.length; i++){
        if(!$(array[i]).val()){
            return false;
        }
    }
    return true;
};

// For your example
if(allHaveValue(required_fields)){
    // Proceed
} else{
    // Handle errors   
}
var allHaveValue = _.every(required_fields, function(item){
    return $(item).val();
});

if(allHaveValue)}{
    // Proceed
} else{
    // Handle errors
}