Я столкнулся с проблемой, которую я никогда раньше не видел в 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()
. Он также не работает с картой в прототипе массива.
Я понятия не имею, что я могу делать неправильно здесь. Он полностью игнорировал меня, добавляя поле. Может ли кто-нибудь помочь?
EDIT: для записи
[{thing: 1}, {thing: 2}].map(function(t){
t.welp = 'welp';
});
вернется [{thing: 1, welp: 'welp'}, {thing: 2, welp: 'welp'}]
, как и ожидалось. Так что это где-то внутри карты.
EDIT СНОВА:
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).
Спасибо!
Try клон, что нужно, а? –
В последних двух случаях вы передаете «os» в обратный вызов «find», но затем используете «другое устройство» внутри. В первом случае, если «.whateded» не существует на «otherstuff», вы получите именно то, что видите. – caasjj
@caasjj Спасибо за указание опечатки. – Steve