2016-12-24 48 views
5

Tôi biết là this existing question tuy nhiên tôi chỉ quan tâm đến các giải pháp javascript đơn giản (không có libs bên ngoài như lodash).Nhận đối tượng với một tập hợp con các thuộc tính của đối tượng khác

Điều gì sẽ là cách sạch nhất (bao gồm tất cả tốt đẹp ES6 và hơn thế nữa - như phần còn lại đối tượng & spread ...) để có được một đối tượng với một tập hợp con đạo cụ từ một đối tượng khác trong javascript?

Cho phép nói rằng tôi muốn chọn foo, barbaz từ đối tượng source. Tôi hiện có hai giải pháp, tôi thích cả hai đều không:

1.

const result = { 
    foo: source.foo, 
    bar: source.bar, 
    baz: source.baz 
}; 

2.

const { foo, bar, baz } = source; 
const target = { foo, bar, baz }; 

Điều thứ hai là ngắn nhưng nó gây ô nhiễm phạm vi thực hiện với một số biến và danh sách của họ phải được viết hai lần anyway.

PS. Tôi cũng không quan tâm đến việc tăng thêm Object.prototype bằng một số phương thức trợ giúp hoặc gọi một số chức năng tùy chỉnh để đạt được điều này.

+0

vấn đề với cách tiếp cận đầu tiên là gì? – guest271314

Trả lời

1

Nếu bạn đã có một đối tượng có chứa nhiều tài sản bạn cần, và và một lượng nhỏ bạn không, bạn có thể sử dụng object rest syntax:

const source = { foo: 1, bar: 2, baz: 3, whatever: 4 }; 
 

 
const { whatever, ...target } = source; 
 

 
console.log(target);

Note - Phần còn lại đối tượng là aa Đề xuất giai đoạn 3 cho ECMAScript, và một trình chuyển đổi (babel với Object rest spread transform) là cần thiết.

2

Bạn có thể sử dụng một IIFE với sự hủy diệt.

const source = { foo: 1, bar: 2, baz: 3 }, 
 
     target = (({ foo, bar, baz }) => ({ foo, bar, baz }))(source); 
 

 
console.log(target);

0

Bạn có thể sử dụng destructuring phân

const source = {foo: 1, bar:2, baz:3, abc: 4, def: 5}; 
 

 
const result = {}; 
 

 
({foo:result.foo, bar:result.bar, baz:result.baz} = source); 
 

 
console.log(result);

Ngoài ra bạn có thể đặt tên thuộc tính như các yếu tố của một mảng, sử dụng for..of vòng lặp với nhiệm vụ destructuring để đặt thuộc tính, giá trị của target

const source = {foo: 1, bar:2, baz:3, abc:4, def: 5}; 
 

 
const result = {}; 
 

 
for (let prop of ["foo", "bar", "baz"]) ({[prop]:result[prop]} = source); 
 

 
console.log(result);

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