【问题标题】:return TRUE or FALSE from a function从函数返回 TRUE 或 FALSE
【发布时间】:2016-09-18 05:17:09
【问题描述】:

这里我有一个函数。它接受一个对象数组和一个特定值。使用 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;
    }

【问题讨论】:

  • return false; 只从你传递给forEach 的回调中返回,它对find_value_in_obj 没有任何影响。你应该考虑使用Array#some

标签: javascript arrays boolean


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    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);
    }
    

    【讨论】:

    • 但是 find() 是 es6 的特性,在一些老版本的浏览器中并不完全支持 es6 特性.... :(
    【解决方案3】:

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

       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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-19
      • 2016-04-16
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      相关资源
      最近更新 更多