对象布尔函数有问题

时间:2018-10-10 19:56:04

标签: javascript

编写一个名为“ find_value”的函数,该函数将键值存储区作为参数,字符串作为键,整数作为值。如果输入中的值为7,则此函数返回一个布尔值,表示true,否则为false。 (下面的代码)

function find_value(key){
    for (var i of Object.values(key)){
        if (i == 7){
            return true;
        }
        else{
            return false;
        }
    }
}

当我使用输入[{'effort': 4, 'doctrine': 8, 'item': 11, 'behavioral': 7, 'occasional': 11}]打电话时,我应该得到true,但是我却得到false。我在做什么错了?

5 个答案:

答案 0 :(得分:1)

您的循环很可能在您的第一个项目上返回false。 您应该保留条件并在循环中返回true语句,但是在循环之后,您应该返回false。

P.S。您应该命名您的参数并设置默认值以作好作法。我在下面的示例中将其重命名。

function find_value(myObject = {}){
    for (var i of Object.values(myObject)){
        if (i == 7){
            return true;
        }
    }
    return false;
}

答案 1 :(得分:0)

您在这里有2个问题:

  1. 您正在传递一个内部带有对象的数组。
  2. 否则,您将返回false,因此函数将仅测试第一个值。

顺便说一句,可以这样:

return Object.values(obj).includes(7);

答案 2 :(得分:0)

为使此方法按预期工作,应将一个对象传递到function find_value(key){ for (var i of Object.values(key)){ // Only early return if matching value found if (i == 7){ return true; } } // Move return false outside of loop return false; } var object_input = {'effort': 4, 'doctrine': 8, 'item': 11, 'behavioral': 7, 'occasional': 11}; console.log( find_value(object_input) ); 中,而不要像执行操作那样将其传递给数组。另外,您将希望通过在循环迭代完成后返回false来更新函数流:

array1

答案 3 :(得分:0)

尝试

function find_value(key){
    for (var i of Object.values(key)){
        if (i == 7){
            return true;
        }
    }
}

答案 4 :(得分:0)

您的函数在第一次迭代中自动返回true或false。对初学者非常友好的最简单解决方案是在循环之前设置一个布尔标志,并在循环结束时进行检查

另外,您正在遍历数组并在循环将返回具有属性+值对的对象时检查值。您想要获取那些对象的值并检查其是否等于7

function find_value(key){
    let flag = false;
    for (let i of key){
        console.log(Object.values(i));
        if (Object.values(i).indexOf(7) > -1) {
            flag = true;
        }
    }
    return flag;
}

console.log(find_value([{'effort': 4, 'doctrine': 8, 'item': 11, 'behavioral': 7, 'occasional': 11}]))