_.map覆盖返回值
使用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对象与一些原型function。
然而,当我检查_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
可以在这里find: http : //pastebin.com/4y6taGUr虽然没有什么特别的事情。
所以问题是一致的:
Search.prototype.search = {};
只要将search
属性放入Search
类的原型中,它就会在所有Search
实例之间共享。 所以这个属性的每一个变化都会影响所有的实例 这就是为什么你总是看到最后分配的值。
为了解决这个问题 – 把这个属性放入实例本身,例如在构造函数中:
var Search = function(searchDoc) { this.search = {}; if(!_.isEmpty(searchDoc)) this.setSearch(searchDoc); };
看到jsbin 。
- 用Promises处理Mongoose错误
- 与-1或undefined比较,不pipe用==还是===
- Node.js:如何在V8引擎中启用non strict或ECMASCRIPT3?
- cucumber-js不能使用节点命令
- 无法获取libphonenumber npm包工作,fs.readFileSync不是一个函数错误
- 通过subprocess与Java应用程序连接后,如何在node.js中写入文件
- 正确地使用Promise和Await / Async
- 节点不能调用未定义的方法'serializeUser'
- 如何在node.js和MongoDb中的JavaScript中混合同步和asynchronous代码