Javascript 调用[Symbol.iterator]()时未生成对象
以下是源代码:Javascript 调用[Symbol.iterator]()时未生成对象,javascript,ecmascript-6,iterator,iterable,Javascript,Ecmascript 6,Iterator,Iterable,以下是源代码: const james = { name: 'James', height: `5'10"`, weight: 185, [Symbol.iterator]:function*(){ yield Object.keys(this) ; } }; const iterator = james[Symbol.iterator](); // console.log(iterator.next().value); // 'James'
const james = {
name: 'James',
height: `5'10"`,
weight: 185,
[Symbol.iterator]:function*(){
yield Object.keys(this) ;
}
};
const iterator = james[Symbol.iterator]();
//
console.log(iterator.next().value); // 'James'
console.log(iterator.next().value); // `5'10`
console.log(iterator.next().value); // 185
对iterator.next().value
的第一次调用应该是打印的
{"value":"James","key":"name","done":false}
但它正在打印<代码>{“值”:[“姓名”、“身高”、“体重”],“完成”:false}。如何解决这个问题 您
一次生成所有密钥。表示您的第一个下一个完成所有工作。您所需要的就是迭代这些键,并按顺序生成它们
const james={
姓名:“詹姆斯”,
高度:`5'10`,
体重:185,
[符号.迭代器]:函数*(){
for(让Object.keys的键(this)){
产生{propValue:this[key],propName:key};
}
}
};
常量迭代器=james[Symbol.iterator]();
log(iterator.next());
log(iterator.next());
console.log(iterator.next());
您可以一次生成所有键。这意味着您的第一个下一个
可以完成所有工作。您只需对键进行迭代并按顺序生成它们
const james={
姓名:“詹姆斯”,
高度:`5'10`,
体重:185,
[符号.迭代器]:函数*(){
for(让Object.keys的键(this)){
产生{propValue:this[key],propName:key};
}
}
};
常量迭代器=james[Symbol.iterator]();
log(iterator.next());
log(iterator.next());
log(iterator.next())代码>实际上,这将是您正在寻找的解决方案,它输出的正是您需要它输出的内容
const james = {
name: 'James',
height: `5'10"`,
weight: 185,
[Symbol.iterator]: function() {
let keys = Object.keys(this), index = 0;
return {
next: () => {
return {
key: keys[index], value: this[keys[index]], done: ++index >= keys.length
};
}
}
}
}
const iterator = james[Symbol.iterator]();
console.log(iterator.next().value);
console.log(iterator.next().value);
console.log(iterator.next().value);
实际上,这将是您正在寻找的解决方案,它输出的正是您需要它输出的内容
const james = {
name: 'James',
height: `5'10"`,
weight: 185,
[Symbol.iterator]: function() {
let keys = Object.keys(this), index = 0;
return {
next: () => {
return {
key: keys[index], value: this[keys[index]], done: ++index >= keys.length
};
}
}
}
}
const iterator = james[Symbol.iterator]();
console.log(iterator.next().value);
console.log(iterator.next().value);
console.log(iterator.next().value);
它正在打印值并完成。它还应该打印关键部分。生成器返回值的语法是{value,done}
。您可以在该值处创建一个具有属性值和名称的对象。我已经更新了正在打印的值和完成。它还应该打印关键部分。生成器返回值的语法是{value,done}
。您可以在该值处创建一个具有属性值和名称的对象。我已经更新了迭代结果中的键从何而来Object.keys
生成数组[“name”,“height”,“weight”]
而不生成其他内容。迭代结果中的键从何而来Object.keys
生成数组[“名称”、“高度”、“重量”]
而不生成其他内容。