1. 问题描述: 如何让一个对象中的值进行解构赋值给数组
var obj = {
a: 1,
b: 2,
};
var [a, b] = obj;
console.log(a, b);
显然会报错
分析: obj不是iterable,所以报错。
查询资料得知: 他需要一个[Symbol.iterator] 方法 .
2 解决方案
Object.prototype[Symbol.iterator] = function () {
var arr = Object.values(this);
var iter = arr[Symbol.iterator]();
return iter;
};
var obj = {
a: 1,
b: 2,
};
var [a, b] = obj;
console.log(a, b);
// 1 2
成功了
3. 生成器解决
Object.prototype[Symbol.iterator] = function* () {
yield* Object.values(this);
};
var obj = {
a: 1,
b: 2,
};
var [a, b] = obj;
console.log(a, b);
// 1 2
Object.prototype[Symbol.iterator] = function* () {
// yield* Object.values(this);
for (var key in this) {
yield this[key];
}
};
var obj = {
a: 1,
b: 2,
};
var [a, b] = obj;
console.log(a, b);
// 1 2