gpt4 book ai didi

javascript - _.map 返回时覆盖值

转载 作者:太空宇宙 更新时间:2023-11-04 00:56:47 25 4
gpt4 key购买 nike

在使用 lodash _.ma 函数时,我注意到一些奇怪的行为。 (那个或者我公然忽略了一些东西)

我有以下内容:

_this.searches = _.map(body.rows, function(row) {
var tmpSearch = new Search(row.value);
console.log(tmpSearch.search['name']);
return tmpSearch.search;
});

Search 只是一个带有一些原型(prototype)函数的标准 JavaScript 对象。

但是,当我检查 _this.searches 时,每个对象都是相同的,我尝试循环它以获得更好的结果:

_.forEach(_this.searches, function(search) {
console.log(search['name']);
})

_.mapconsole.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

_.forEachconsole.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

搜索可以在这里找到:http://pastebin.com/4y6taGUr虽然没有什么特别的事情发生。

最佳答案

所以问题是这样的:

Search.prototype.search = {};

一旦将 search 属性放入 Search 类的原型(prototype)中,它就会在 Search 的所有实例之间共享。因此,此属性的每次更改都会影响所有实例。这就是为什么您总是看到最后分配的值。
要修复它 - 将此属性放入实例本身,例如在构造函数中:

var Search = function(searchDoc) {
this.search = {};
if(!_.isEmpty(searchDoc)) this.setSearch(searchDoc);
};

请参阅jsbin .

关于javascript - _.map 返回时覆盖值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29427193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com