2016-04-13 16 views
5

Có cách nào để sao chép đối tượng bằng lodash, nhưng không phải tất cả các thuộc tính. Cách duy nhất tôi biết là tự sao chép nó sở hữu bởi bất động sảnlodash: đối tượng sao chép sâu nhưng không phải tất cả các thuộc tính

muốn ví dụ:

var obj = { 
    a: 'name', 
    b: [1,2,3], 
    c: { 
     z: 'surname', 
     x: [] 
    }, 
    d: { 
     y: 'surname2', 
     w: [] 
    } 
}; 

và kết quả được như

var copy_obj = { 
    b: [1,2,3], 
    c: { 
     z: 'surname', 
     x: [] 
    } 
}; 

Edit: tôi cuối cùng đã lựa chọn:

var blacklist = ['a','d']; 
_.cloneDeep(_.omit(obj, blacklist)); 
+1

Nhìn vào 'chọn' và' bỏ qua'. – elclanrs

+1

Nếu bạn đã tự giải quyết vấn đề, vui lòng đặt câu trả lời đó chứ không phải là câu trả lời cho câu hỏi. Nếu bạn muốn, bạn có thể chấp nhận câu trả lời đó. –

Trả lời

-4
var blacklist = ['a','d']; 
_.cloneDeep(_.omit(obj, blacklist)); 
+2

Tại sao bạn sao chép từ trả lời của tôi cho từ và đánh dấu nó là chính xác? – Chris

+0

@ Chris: Để công bằng, [câu trả lời của bạn] (https://stackoverflow.com/a/36612253/1430156) là từ ngày 14 tháng 4, trong khi OP đã viết mã này rất nhiều (như là một [sửa cho câu hỏi] (https://stackoverflow.com/revisions/36604403/2)) vào ngày 13 tháng 4, trước khi có thể sao chép * đoạn mã * đó vào câu trả lời mới (như được đề xuất bởi [người nhận xét] (https://stackoverflow.com/questions/36604403 # comment60825938_36604403)). –

+0

Công bằng, có vẻ hơi lạ. Đã được tò mò nếu có một cái gì đó ông tìm thấy trong câu trả lời của mình mà làm cho nó chính xác hơn - cho độc giả trong tương lai của câu hỏi/câu trả lời này – Chris

2

Bạn có thể sử dụng pick chức năng:

_.pick(obj, 'b', 'c') 
+0

Giả sử OP muốn có một bản sao sâu, như được đề xuất bởi tiêu đề câu hỏi, điều này sẽ không làm điều đó. –

1

Bạn có thể sử dụng tham số thứ hai để JSON.stringify để thực hiện việc này.

JSON.parse(JSON.stringify(obj, ['b', 'c'])) 
0

Bạn có thể sử dụng một sự kết hợp của gánchọn

Object.assign(copy_obj, _.pick(obj, ['b', 'c'])); 

Bằng cách này, nếu copy_obj có các thuộc tính khác mà bạn không ghi đè lên chúng.

Các vấn đề liên quan