_.map 覆盖 return 上的值
_.map overwriting value upon return
我在使用 lodash
_.ma
函数时注意到一些奇怪的行为。 (那个或者我公然忽略了一些东西)
我有以下内容:
_this.searches = _.map(body.rows, function(row) {
var tmpSearch = new Search(row.value);
console.log(tmpSearch.search['name']);
return tmpSearch.search;
});
Search
只是一个带有一些原型函数的标准 javascript 对象。
然而,当我检查 _this.searches
时,每个对象都是相同的,我试图循环遍历它以获得更好的结果:
_.forEach(_this.searches, function(search) {
console.log(search['name']);
})
_.map
的 console.log
是这样的:
2015-04-03T14:14:29+0800 <log> searches.js:35 () test
2015-04-03T14:14:29+0800 <log> searches.js:35 () Test 2
2015-04-03T14:14:29+0800 <log> searches.js:35 () Testing search
_.forEach
的 console.log
是这样的:
2015-04-03T14:14:29+0800 <log> searches.js:42 () Testing search
2015-04-03T14:14:29+0800 <log> searches.js:42 () Testing search
2015-04-03T14:14:29+0800 <log> searches.js:42 () Testing search
Search
可以在这里找到:http://pastebin.com/4y6taGUr
虽然没什么特别的。
那么问题就在:
Search.prototype.search = {};
只要您将 search
属性 放入 Search
class 的原型中,它就会在 Search
的所有实例之间共享。因此,此 属性 的每次更改都会影响所有实例。这就是为什么您总是看到最后分配的值。
要修复它 - 将此 属性 放入实例本身,例如在构造函数中:
var Search = function(searchDoc) {
this.search = {};
if(!_.isEmpty(searchDoc)) this.setSearch(searchDoc);
};
参见jsbin。
我在使用 lodash
_.ma
函数时注意到一些奇怪的行为。 (那个或者我公然忽略了一些东西)
我有以下内容:
_this.searches = _.map(body.rows, function(row) {
var tmpSearch = new Search(row.value);
console.log(tmpSearch.search['name']);
return tmpSearch.search;
});
Search
只是一个带有一些原型函数的标准 javascript 对象。
然而,当我检查 _this.searches
时,每个对象都是相同的,我试图循环遍历它以获得更好的结果:
_.forEach(_this.searches, function(search) {
console.log(search['name']);
})
_.map
的 console.log
是这样的:
2015-04-03T14:14:29+0800 <log> searches.js:35 () test
2015-04-03T14:14:29+0800 <log> searches.js:35 () Test 2
2015-04-03T14:14:29+0800 <log> searches.js:35 () Testing search
_.forEach
的 console.log
是这样的:
2015-04-03T14:14:29+0800 <log> searches.js:42 () Testing search
2015-04-03T14:14:29+0800 <log> searches.js:42 () Testing search
2015-04-03T14:14:29+0800 <log> searches.js:42 () Testing search
Search
可以在这里找到:http://pastebin.com/4y6taGUr
虽然没什么特别的。
那么问题就在:
Search.prototype.search = {};
只要您将 search
属性 放入 Search
class 的原型中,它就会在 Search
的所有实例之间共享。因此,此 属性 的每次更改都会影响所有实例。这就是为什么您总是看到最后分配的值。
要修复它 - 将此 属性 放入实例本身,例如在构造函数中:
var Search = function(searchDoc) {
this.search = {};
if(!_.isEmpty(searchDoc)) this.setSearch(searchDoc);
};
参见jsbin。