我遇到了一個我從未見過的問題在JavaScript中。下面是我在做什麼不能將對象添加到另一個對象與地圖
var doStuff = function(stuff, otherstuff){
return _.map(stuff, function(s){
// Thing needed is a fairly big object
var thingNeeded = _.find(otherstuff, function(os){
return os.whatineed;
});
var new_thing = _.clone(s);
new_thing.new_field = thingNeeded;
return new_thing;
});
};
本質但這返回一個列表,它是原始stuff
列表!它甚至如果我這樣做變化
var doStuff = function(stuff, otherstuff){
return _.map(stuff, function(s){
// Thing needed is a fairly big object
var thingNeeded = _.find(otherstuff, function(os){
return os.whatineed;
});
s.new_field = thingNeeded;
return s;
});
};
或
var doStuff = function(stuff, otherstuff){
return _.map(stuff, function(s){
// Thing needed is a fairly big object
var thingNeeded = _.find(otherstuff, function(os){
return os.whatineed;
});
s['new_field'] = thingNeeded;
return s;
});
};
或變更使用_.extend()
和_.create()
發生。它也不適用於數組原型中的地圖。
我不知道我在這裏可能會做錯什麼。它完全無視我加入該領域。誰能幫忙?
編輯:備案
[{thing: 1}, {thing: 2}].map(function(t){
t.welp = 'welp';
});
將返回[{thing: 1, welp: 'welp'}, {thing: 2, welp: 'welp'}]
預期。所以它在地圖的某個地方。
再次編輯:
var doStuff = function(stuff, otherstuff){
return _.map(stuff, function(s){
// Thing needed is a fairly big object
var thingNeeded = _.find(otherstuff, function(os){
return os.whatineed;
});
var new_thing = _.clone(s);
new_thing.new_field = thingNeeded;
console.log('stuff:', new_thing.new_field);
return new_thing;
});
};
的執行console.log將返回我們期望的值(thingNeeded)。
謝謝!
嘗試克隆事情需要呢? –
在最後兩種情況下,您將'os'傳遞給'find'回調函數,但在其中使用'otherstuff'。在第一種情況下,如果在'otherstuff'上不存在'.whatineed',那麼你會得到你所看到的。 – caasjj
@caasjj感謝您指出錯字。 – Steve