函数不返回值,只有console.logs

时间:2017-04-12 16:17:30

标签: javascript

我是JS的新人,但现在我完全糊涂了。为什么我的函数打印登录到控制台但我无法返回其值?

ALTER TABLE table_name 
CHANGE column_name column_name type DEFAULT NULL

但如果我在我的代码中尝试了那个......它根本不起作用

function searchObj (obj, query) {
    var variableToReturn="";
    for (var key in obj) {
        var value = obj[key];

        if (typeof value === 'object') {
            searchObj(value, query);
        }

        if (value === query) {
            console.log('property=' + key + ' name=' + obj["name"]);
            variableToReturn = obj["name"];
        }
    }
    return variableToReturn;
  }

变量是空的;(我试着整天理解它

我只在我的控制台中获得正确的值:

var newAttributes =searchObj(position, "1277,1795");

这是我正在寻找的目标之一:

property=backward name=brumi

3 个答案:

答案 0 :(得分:1)

  • 修改了代码,因为它似乎不适用于两个以上的对象 这是工作代码:



var position = {
  current: {
    coordinates: '2408,1822',
    name: 'start',
    premiumPoints: 0,
    points: 0,
    backward: "0,0"
  },
  some: {
    coordinates: '2409,1822',
    name: 'Some Start',
    premiumPoints: 0,
    points: 0,
    backward: "0,0"
  },
   more: {
    coordinates: '2400,1822',
    name: 'more Start',
    premiumPoints: 0,
    points: 0,
    backward: "0,0"
  }
};

function searchObj(obj, query) {
  var data ='';
  for (var property in obj) {
    if (obj.hasOwnProperty(property)) {
      if (typeof obj[property] === "object") {
       data = searchObj(obj[property], query);       
        if(data !='') return data; 
      }
      else {
        if (obj[property] === query) {         
          return  obj["name"];               
        }
      }
    }
  } 
  
  return data;
}

var data = searchObj(position, "2400,1822")
console.log("Result : " +data)




由于您在代码中使用递归函数,因此需要添加" return"在他们面前

在上面的代码中,我添加了return for recursive searchObj(value, query);obj["name"];

告诉我们这是否有效

答案 1 :(得分:0)

根据我的理解,您要做的是递归搜索嵌套对象并检查其中是否存在与参数query匹配的值。您的代码存在的问题是变量variableToReturn已初始化为''每次调用该函数。由于当值与您的查询匹配时,您没有返回variableToReturn。该函数将搜索嵌套对象,直到访问了所有键。最后一个键可能不包含您想要的值,因为您将variableToReturn声明为""在代码的开头,它将返回该值尝试在chrome中运行代码,您将看到该函数将返回""。我相信通过在您的递归通话中添加return,当您与当前value匹配时,query将解决您的问题。所以你的功能应该如下所示:



function searchObj (obj, query) {
    // loop through the keys in obj
    for (let key in obj) {
        let value = obj[key];

        if (typeof value === 'object') {
            // current value is an object, so search recursively
            return searchObj(value, query);
        }

        if (value === query) {
            // found the value 
            return obj['name'];
        }
    }
    // can't find keys that match, so return empty string
    return '';
}




答案 2 :(得分:0)

return语句将值传递回当前函数调用帧的直接调用者。在递归的情况下,这个直接调用者可以是对同一函数的另一个调用。

因此需要返回递归的结果,否则该方法会隐式返回" undefined"

所以,

var position =  {
  current: {
    coordinates: '2408,1822',
    name: 'start',
    premiumPoints: 0,
    points: 0,
    backward: "0,0"
  }
  };

  function searchObj (obj, query) {
    var variableToReturn="";
    for (var key in obj) {
        var value = obj[key];

        if (typeof value === 'object') {
          return  searchObj(value, query);
        }

        if (value === query) {

          variableToReturn = obj["name"];
        }
    }
    return variableToReturn;
  }

  var variableToReturn = searchObj(position, "2408,1822");