我是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
答案 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");