Cách đặt tên thuộc tính đối tượng JS từ một biến


178

Tôi cần phải thiết lập một tên thuộc tính đối tượng JS một cách linh hoạt.

for(i=1; i<3; i++) {
    var key  = i+'name';

    data = {
        key : 'name1',
    }
}

Kết quả sẽ là:

data = {
    1name: 'name1'
    2name: 'name1'
}

Nếu chúng là tuần tự, tại sao bạn không sử dụng Mảng?
eprebello

Tôi muốn biết ba bạn trúng mũi tên sai. Thôi nào, đi lên.
Charles

Câu trả lời:


194
var jsonVariable = {};
for(var i=1; i < 3; i++) {
  jsonVariable[i + 'name'] = 'name' + i;        
}

4
Phản hồi của Musa dưới đây cũng nói rõ rằng sử dụng ký hiệu [] thực sự là cách duy nhất để làm điều đó.
Dennis Plucinik

1
Cũng lưu ý rằng phản hồi của @ ChilNut bên dưới bây giờ mô tả cách dễ nhất để thực hiện việc này bằng ES6
rambossa

1
Trên thực tế, với cú pháp mới, những gì OP đang cố gắng đạt được sẽ chỉ có thể nếu giới hạn vòng lặp được mã hóa cứng và nhỏ.
Musa

168

Bạn sẽ phải sử dụng []ký hiệu để thiết lập các phím động.

var jsonVariable = {};
for(i=1; i<3; i++) {        
 var jsonKey  = i+'name';
 jsonVariable[jsonKey] = 'name1';

}

Bây giờ trong ES6, bạn có thể sử dụng cú pháp đối tượng theo nghĩa đen để tạo các khóa đối tượng một cách linh hoạt, chỉ cần bọc biến trong []

var key  = i + 'name';
data = {
    [key] : 'name1',
}

3
jsonVariable = {}; không nên được khởi tạo bên trong vòng lặp for.
đóng cửa

Ngoài ra, bạn đang thực hiện jsonVariable toàn cầu tại đây
Dennis Plucinik

130

Với ECMAScript 6, bạn có thể sử dụng tên thuộc tính biến với cú pháp bằng chữ của đối tượng, như sau:

var keyName = 'myKey';
var obj = {
              [keyName]: 1
          };
obj.myKey;//1

Cú pháp này có sẵn trong các trình duyệt mới hơn sau đây:

Cạnh 12+ (Không hỗ trợ IE), FF34 +, Chrome 44+, Opera 31+, Safari 7.1+

( https:// Khangax.github.io/compat-table/es6/ )

Bạn có thể thêm hỗ trợ cho các trình duyệt cũ hơn bằng cách sử dụng bộ chuyển mã như babel . Thật dễ dàng để dịch mã toàn bộ một dự án nếu bạn đang sử dụng một bộ đóng gói mô-đun như rollup hoặc webpack .


2
Cảm ơn bạn đã thêm cú pháp ES6 tuyệt vời
rambossa

Nếu không có ES6, tôi không thể xác định var payload = {DynamicKey: val}, tôi cần thực hiện var payload = {} và payload [biếnName] = val.
Sainath SR

23

Đây là cách để tự động đặt giá trị

var jsonVariable = {};
for (var i = 1; i < 3; i++) {
    var jsonKey = i + 'name';
    jsonVariable[jsonKey] = 'name' + i;
}


7

Không quan trọng là biến đến từ đâu. Điều chính chúng ta có một ... Đặt tên biến giữa các dấu ngoặc vuông "[..]".

var optionName = 'nameA';
var JsonVar = {
[optionName] : 'some value'
}

Điều này hoạt động tốt, tôi tự hỏi nếu nó hoạt động trong tất cả các trình duyệt / phiên bản
Mercury

1
jsonVariable = {}
for(i=1; i<3; i++) {        
   var jsonKey  = i+'name';
   jsonVariable[jsonKey] = 'name1'
}

điều này sẽ tương tự như

    jsonVariable = {
    1name : 'name1'
    2name : 'name1'
}

0

Dọc theo dòng nhận xét của Sainath SR ở trên, tôi có thể đặt tên thuộc tính đối tượng js từ một biến trong Tập lệnh Google Apps (chưa hỗ trợ ES6) bằng cách xác định đối tượng sau đó xác định khóa / giá trị khác bên ngoài đối tượng:

var salesperson = ...

var mailchimpInterests = { 
        "aGroupId": true,
    };

mailchimpInterests[salesperson] = true;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.