我希望能够在函数外部访问嵌套 each()
函数的值。
我的方法是:
但这不起作用:
的jsfiddle
http://jsfiddle.net/rwone/ESXB4/
的jQuery
var my_array = [{"check": "tom", "nested_array": [{"nested_array_2": ["1", "2"], "name": "tom", "image": "one.jpg"}, {"nested_array_2": ["1", "2"], "name": "bob", "image": "two.jpg"}]}];
var check = my_array[0].check;
var desired_value = "hello";
$.each(my_array, function (obj, v) {
$.each(v.nested_array, function (i, value) {
if (value.name == check) {
var desired_value = value.image;
alert(desired_value); // this returns `one.jpg`, the variable has been updated.
}
});
});
//alert(desired_value); // this alerts 'hello', the variable has not been updated.
如果以上是错误的方法,是否有人可以演示如何访问嵌套each()
循环的返回值?
编辑:我应该说,我在任何阶段使用全局变量都很谨慎,因为这可能会在以后的应用程序中引起问题。
编辑2:我认为在函数中使用全局变量将永远并且始终定义变量(除非它再次全局定义),但它似乎不是例如:
var desired_value = "hello";
$.each(my_array, function (obj, v) {
$.each(v.nested_array, function (i, value) {
if (value.name == check) {
desired_value = value.image; // 'global'
alert(desired_value); // this returns `one.jpg`, the variable has been updated.
}
});
});
alert(desired_value); // this alerts 'one.jpg', the variable has been updated.
var desired_value = "new value";
alert(desired_value); // this alerts 'new value'
更新了jsFiddle
答案 0 :(得分:1)
您正在使用desired_value
从外部作用域隐藏var desired_value = value.image;
。这将在循环函数中创建名为desired_value
的局部变量。您应该在此处删除var
。
答案 1 :(得分:1)
更新了FIDDLE
var my_array = [{"check": "tom", "nested_array": [{"nested_array_2": ["1", "2"], "name": "tom", "image": "one.jpg"}, {"nested_array_2": ["1", "2"], "name": "bob", "image": "two.jpg"}]}];
var check = my_array[0].check;
var desired_value = "hello";
$.each(my_array, function (obj, v) {
$.each(v.nested_array, function (i, value) {
if (value.name == check) {
desired_value = value.image; // here changes was made
alert(desired_value);
}
});
});
alert(desired_value);