Toán tử spread và iterator trong JavaScript

Toán tử spread phân rã bất kỳ đối tượng nào có iterator. Khi đó, iterator mặc định sẽ được sử dụng. Hãy cùng xem một ví dụ. Giả sử chúng ta có collection Map sau:

javascriptlet map = new Map();
map.set('a', 1);
map.set('b', 2);
map.set('c', 3);

Theo mặc định, khi phân rã, kết quả sẽ là một mảng hai chiều:

javascriptlet arr = [...map];
console.log(arr); // [['a', 1], ['b', 2], ['c', 3]]

Để lấy mảng các khóa, hãy phân rã iterator tương ứng:

javascriptlet arr = [...map.keys()];
console.log(arr); // ['a', 'b', 'c']

Tương tự, để lấy mảng các giá trị:

javascriptlet arr = [...map.values()];
console.log(arr); // [1, 2, 3]
Задание 1

Hãy phân rã đối tượng sau bằng toán tử spread:

javascriptlet obj = {
  a: 1,
  b: 2,
  c: 3,
  [Symbol.iterator]: function *(){
    for (let key in this){
      yield this[key];
    }
  }
};