2015-09-10 186 views
1

我遇到了一個我從未見過的問題在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)。

謝謝!

+0

嘗試克隆事情需要呢? –

+0

在最後兩種情況下,您將'os'傳遞給'find'回調函數,但在其中使用'otherstuff'。在第一種情況下,如果在'otherstuff'上不存在'.whatineed',那麼你會得到你所看到的。 – caasjj

+0

@caasjj感謝您指出錯字。 – Steve

回答

0

我想你應該在使用當前迭代對象的時候,在地圖迭代器中使用了東西。

這裏是工作提琴http://jsfiddle.net/rzkvne23/

var doStuff = function(stuff, otherstuff){ 
    return _.map(stuff, function(s){ 

    var thingNeeded = _.find(otherstuff, function(os){ 
     return os.whatineed === 2; 
    }); 

    var new_thing = _.clone(s); 
    new_thing.new_field = thingNeeded; 
    console.log('stuff:', new_thing.new_field); 
    return new_thing; 
    }); 
}; 

var a = [{},{},{}]; 
var b = [{whatineed: 1},{whatineed:2},{whatineed:3}]; 

console.dir(doStuff(a,b)); 
+0

這永遠不會解決。你發現了另一個錯字。對不起。在真正的代碼中,我克隆了類似於其他使用s的示例。我即將放棄這一點,並採取其他措施。正因爲這個原因,我討厭javascript。 – Steve