Có cách nào trong javascript để gán giá trị của các trường được đặt tên trong đối tượng vào cùng một trường của đối tượng khác, nếu và chỉ khi trường mục tiêu tồn tại. I E. ghi đè các giá trị cũ, KHÔNG thêm các giá trị mới, bằng cách sử dụng các cấu trúc ideomatic, một lớp lót (đặc biệt cho javascript và/hoặc jQuery) và không có cách nào lặp lại, thậm chí là cả trong.Javascript: Ghi đè CHỈ các trường hiện có trong một đối tượng với các trường khác trong
var theSource = {
field1: "TEXT",
field2: "VAL",
field3: "ZZ",
field4: "4",
field5: "5"
},
theTarget = {
field2: "0",
field3: "",
field4: null,
field5: undefined
};
Something như
var result = jQuery.overwriteOnlyExisting(theTarget, theSource);
result === {
field2: "VAL"
field3: "ZZ"
...
}
NO field1 VÀ lĩnh vực cũ sau field3 được bảo toàn.
jQuery.extend
- có thể ghi đè giá trị, nhưng cũng sao chép các trường mới.
Chúng tôi có các tùy chọn nào ở đây?
http://jsbin.com/owivat/1/edit (gạch dưới) - Tôi thích điều này, bây giờ là thời điểm để tìm cách jquery.
Kết quả:
_.extend(theTarget, _(theSource).pick(_(theTarget).keys()));
142.850 Ops/giây
Object.keys(theTarget).map(function(a) { if (a in theSource) theTarget[a] = theSource[a]; });
403.243 Ops/giây
lý do tại sao * ... và không có cách nào lặp lại, ngay cả khi tham gia *? – fcalderan
Bạn nên sử dụng http://underscorejs.org/#each và http://backbonejs.org/#Model-has cho điều đó. Cơ bản là vòng lặp for-in trên nguồn và object.hasOwnProperty trên đích. – inf3rno
@ inf3rno cool để biết, nhưng bị mắc kẹt với jQuery :) –