Thêm thuộc tính vào một mảng đối tượng


103

Tôi có một mảng các đối tượng như hình dưới đây

Object {Results:Array[2]}
     Results:Array[2]
[0-1]
0:Object
       id=1     
       name: "Rick"
1:Object
       id=2     
       name:'david'

Tôi muốn thêm một thuộc tính nữa có tên là Hoạt động vào mỗi phần tử của mảng Đối tượng này.

Kết quả cuối cùng sẽ như sau.

Object {Results:Array[2]}
     Results:Array[2]
[0-1]
0:Object
       id=1     
       name: "Rick"
       Active: "false"
1:Object
       id=2     
       name:'david'
       Active: "false"

Ai đó có thể vui lòng cho tôi biết làm thế nào để đạt được điều này.


6
Lặp qua mảng. Thêm thuộc tính cho từng phần tử mảng trong khi lặp. Phần nào bạn chưa biết làm?
JJJ

Câu trả lời:


147

Bạn có thể sử dụng forEachphương thức để thực thi một hàm được cung cấp một lần cho mỗi phần tử trong mảng. Trong hàm được cung cấp này, bạn có thể thêm thuộc Activetính vào phần tử.

Results.forEach(function (element) {
  element.Active = "false";
});

204

hoặc dùng map

Results.map(obj=> ({ ...obj, Active: 'false' }))

Đã chỉnh sửa để phản ánh nhận xét bởi @adrianolsk để không thay đổi bản gốc và thay vào đó trả về một đối tượng mới cho mỗi bình luận.

Đọc thông số kỹ thuật


4
chỉ được hỗ trợ trong ES6
Amaynut

5
ES5 để được chính xác;) - nhưng babel sẽ hạnh phúc dịch ngược nó
sidonaldson

50
bản đồ nên trả về một mảng mới không đột biến đối tượng, trong trường hợp này foreach sẽ tốt hơn, hoặc bản đồ sử dụng và trả về một đối tượng mớiResults.map(obj=> ({ ...obj, Active : 'false' }))
adrianolsk

4
Giải pháp tuyệt vời @adrianolsk, bạn nên gửi câu trả lời đó như một câu trả lời riêng biệt.
Michael Hays


1

Tôi cũng đã nghĩ ra vấn đề này và cố gắng giải quyết nó, tôi liên tục gặp sự cố tab chrome đang chạy ứng dụng của tôi. Có vẻ như toán tử lây lan cho các đối tượng là thủ phạm.

Với một chút trợ giúp từ bình luận của adrianolsk và câu trả lời của sidonaldson ở trên, tôi đã sử dụng Object.assign () đầu ra của toán tử spread từ babel, như sau:

this.options.map(option => {
  // New properties to be added
  const newPropsObj = {
    newkey1:value1,
    newkey2:value2
  };

  // Assign new properties and return
  return Object.assign(option, newPropsObj);
});

0

Nó đi qua đối tượng dưới dạng cấu trúc khóa-giá trị. Sau đó, nó sẽ thêm một thuộc tính mới có tên là 'Hoạt động' và một giá trị mẫu cho thuộc tính này ('Hoạt động) vào mọi đối tượng bên trong đối tượng này. mã này có thể được áp dụng cho cả mảng đối tượng và đối tượng của đối tượng.

   Object.keys(Results).forEach(function (key){
            Object.defineProperty(Results[key], "Active", { value: "the appropriate value"});
        });

Có chắc chắn, Nó đi qua đối tượng dưới dạng cấu trúc khóa-giá trị. Sau đó, nó sẽ thêm một thuộc tính mới gọi là 'Hoạt động' và một giá trị mẫu cho mọi đối tượng bên trong đối tượng này. mã này có thể được áp dụng cho cả mảng đối tượng và đối tượng của đối tượng.
Arash MAS

0

Với ES6, bạn có thể chỉ cần làm:

 for(const element of Results) {
      element.Active = "false";
 }
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.