从函数返回TRUE或FALSE

return TRUE or FALSE from a function

本文关键字:FALSE TRUE 返回 函数      更新时间:2023-09-26

这里有一个函数,它接受一个对象数组和一个特定的值。使用forEach方法迭代数组,以确保所提供的值已经存在于数组中的任何对象中。如果找到,它返回FALSE,或者应该返回true。但是,尽管它返回FALSE,但执行的其余代码始终返回TRUE。如何只返回FALSE/TRUE

   if(find_value_in_obj(all_selected,current.value)){
        all_selected.push({select_elem:current,value:current.value});
        console.log(all_selected);
    }else{
        alert("you already selected the value");   
    }
  function find_value_in_obj(arr_obj,value){
        arr_obj.forEach(function(elem,index,array){
            if(elem.value == value){
                console.log('found it ');
                return false;
            }
        });
        console.log("i am her"); // though value already exists and should returned ,it gets executed results in returning TRUE instead
        return true;
    }

forEach遍历所有值。您应该使用。some()。

由于使用some只是一个一行代码,您实际上不需要为它创建一个助手,例如(从MDN):

console.log([2, 5, 8, 1, 4].some(elem => elem > 10));  // false
console.log([12, 5, 8, 1, 4].some(elem => elem > 10)); // true

forEach不能像常规的for循环那样在迭代中途中断。使用常规的for循环代替。或者,如果你正在使用ES6,那么你可以通过使用.find()来实现同样的事情。

function find_value_in_obj(arr_obj,value){
   return !!!arr_obj.find(itm => itm == value);
}

正如felix建议的那样,您也可以使用Array.prototype.some

function find_value_in_obj(arr_obj,value){
   return !arr_obj.some(itm => itm == value);
}

您也可以尝试使用过滤器,它更合适和干净。

   if(find_value_in_obj(all_selected,current.value)){
    all_selected.push({select_elem:current,value:current.value});
    console.log(all_selected);
}else{
    alert("you already selected the value");   
}
function find_value_in_obj(arr_obj,value){
    var resultArray = arr_obj.filter(function(elem,index,array){
        return elem.value == value;
    });
    if(resultArray.length > 0){
       return false;
    }
    console.log("i am her"); // though value already exists and should returned ,it gets executed results in returning TRUE instead
    return true;
}