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
}