2013-04-09 12 views
7

Tôi hy vọng ngày sẽ tìm thấy bạn tốt.Cố gắng thêm nhiều thuộc tính vào đối tượng Javascript bằng cách sử dụng vòng lặp

Vì vậy, tôi có một đối tượng không có thuộc tính. Tôi đang cố gắng để thêm nhiều thuộc tính cho đối tượng này bằng cách sử dụng một vòng lặp. Mỗi thuộc tính thêm vào vòng lặp sẽ xuất hiện trong đối tượng nhiều lần tùy thuộc vào bao nhiêu lần chạy vòng lặp, với mỗi tài sản mới tăng thêm 1.

Vì vậy, tôi có một cái gì đó như thế này:

myObject = { }; 

for(i = 0; i < 2; i++){ 
    myObject.propA + i = foo; 
    myObject.propB + i = bar; 
}; 

Mà tôi muốn mang lại một cái gì đó như thế này:

myObject.propA0 = foo; 
myObject.propB0 = bar; 
myObject.propA1 = foo; 
myObject.propB2 = bar; 

Tạo một chồng các đối tượng được tạo nhanh tùy thuộc vào số vòng lặp chạy. Nhưng tôi dường như không nhận được điều này. Vì vậy, làm thế nào chính xác để tôi ăn biến từ vòng lặp đến tài sản khi nó được tạo ra và được giao?

Trả lời

19

Hãy thử sử dụng ký hiệu khung vuông cho tên

myObject['propa' + i] = foo; 
+0

Điều này trong thực tế đã làm nó, nhiều nghĩa vụ. –

5

Sử dụng phương pháp mảng truy cập để thiết lập các thuộc tính.

myObject = { }; 

for(i = 0; i < 2; i++){ 
    myObject['propA' + i] = foo; 
    myObject['propB' + i] = bar; 
}; 
+0

Điều này cũng tỏ ra hữu ích, một số đối tượng trong dự án hiện tại của tôi hoạt động tốt hơn như các nhóm mảng. –

1

bạn có thể sử dụng

object['popA'+i]=... 

để tạo ra một tài sản tiêu chuẩn hoặc thể sử dụng một getter/setter property, trong trường hợp này bạn cần phải sử dụng

Object.defineProperty(object, *propertyname*, *propertyDescriptor*). 

Sau đó cung cấp cho bạn hơn tùy chọn trên thuộc tính đã tạo.

Tất cả các chi tiết ở đây:
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineProperty

9

Khi người dùng khác nói, bạn phải sử dụng ký hiệu khung để chỉ tính chất của chuỗi tên của họ:

myObject['propA' + i] = 'foo'; 

Nhưng tại sao bạn không sử dụng một mảng các đối tượng, thay vì một đối tượng duy nhất có tên thuộc tính được đánh số tương tự? Một cái gì đó như thế này:

var myArray = []; 
for(i = 0; i < 2; i++){ 
    myArray.push({ 
     propA: 'foo', 
     propB: 'bar' 
    }); 
}; 

này nên sản xuất:

[ 
    { propA: 'foo', propB: 'bar'}, 
    { propA: 'foo', propB: 'bar'} 
] 

Có vẻ cách sạch hơn, theo ý kiến ​​của tôi.