将值放回数组中相应的用户
put values back to corresponding users in array
在下面的代码示例中,我试图从文本中获取位置,同时循环遍历text_array的每个用户。从文本中提取位置后,我试图将值放回与正确用户对应的数组中,但它会给我错误"text_array[I]未定义"。这个我做错了什么?
function replace_undefined(text_array) {
var userLocationText = {};
for (i = 0, l = text_array.length; i < l; i++) {
console.log(text_array[i].user);
userLocationText[text_array[i].user] = text_array[i].location;
var text = text_array[i].text;
Placemaker.getPlaces(text, function (o) {
console.log(o);
if ($.isArray(o.match)) {
if (o.match[0].place.name == "Europe" || o.match[0].place.name == "United States") {
var location = o.match[1].place.name;
userLocationText[text_array[i].user] = location;
}
if ($.isArray(o.match)) {
if (o.match[0].place.name !== "Europe") {
var location = o.match[0].place.name;
userLocationText[text_array[i].user] = location;
}
}
} else if (!$.isArray(o.match)) {
var location = o.match.place.name;
userLocationText[text_array[i].user] = location;
}
console.log(text_array);
});
}
}
}
text_array = [{
user: a,
user_id: b,
date: c,
profile_img: d,
text: e,
contentString: f,
url: g,
location: undefined
}, {
user: a,
user_id: b,
date: c,
profile_img: d,
text: e,
contentString: f,
url: g,
location: undefined
}, {
user: a,
user_id: b,
date: c,
profile_img: d,
text: e,
contentString: f,
url: g,
location: undefined
}];
因为Placemaker.getPlaces
肯定是异步的,所以这里有一个肮脏的闭包:
Placemaker.getPlaces(text, (function () {
var z = i;
return function (o) {
var i = z;
...
console.log(text_array);
};
})());
如果你使用另一个var而不是"i",在它自己的回调中提取函数,那么它会更干净。
基本上,这不会将一个函数作为Placemaker.getPlaces的第二个参数来执行,而是将其封装在另一个立即执行的函数中。立即执行的包装函数保存"i"的当前值,并返回初始匿名函数。初始函数将由Placemaker.getPlaces在其准备就绪时使用,与以前一样。
但现在,由于闭包的原因,我的"z"var保持了在for循环期间存在的"i"的值,并且可以在循环结束后很长一段时间使用。
我知道,不是那么清楚。
编辑:好吧,也许这把小提琴会有帮助。
相关文章:
- 使用javascript搜索具有用户输入的数组
- 将当前用户的 ID 推送到 meteorjs 中集合/文档的内部数组
- 如何在用户输入时实例化数组
- 如何从客户端的数组中获取用户输入和返回值
- Javascript:使用用户输入搜索数组
- 将用户选择添加到数组中
- 从用户输入中制作数组动画,如打字机(javascript)
- 将值放回数组中相应的用户
- 根据某些条件验证用户输入,而不是将输入输入到数组中,需要最基本的解决方案
- 从 DOM 中删除/删除 Javascript 用户定义的数组
- 根据数组中的值检查用户输入值
- JavaScript-在数组中查找元素,并从用户提示中处理null
- 将用户输入存储在javascript数组中并显示
- 如何从HTML表单中获取用户输入并将其存储在现有的JavaScript数组中
- 如何通过向用户推送模式引用来更新用户对象's数组字段
- 如何在每次用户填充3个输入时在数组内自动创建对象
- 用户输入设置数组长度
- 向数组中的每个用户添加共同好友数
- 使用JavaScript存储在数组中的用户输入
- 如何从用户制作的数组中具体拼接出一个项目