javascript - 使普通对象可迭代。(javascript)
问题描述
因此,在介绍了 Marjin Heverbeke 的 eloquent javascript 的前七章之后,我正在开展一个个人项目。我正在创建学校数据处理系统。所以我已经制作了包含很多对象的数据结构,所以我创建了一个测试对象,以便我可以练习迭代协议,这就是我写的
let object = {a:'a',b:'b',c:'c',d:'d',e:'e'};
object[Symbol.iterator]=function(){
let keys = Object.keys(this);
let count=0;
return {
next(){
if(count>keys.length){
return {value: null, done:true};
}
else{
let value=this[keys[count]];
count++;
return {value, done:false};
}
}
}
}
但是当我这样做时
for(let each of object){
console.log([each]);
}
它输出
//Array[undefined]
//Array[undefined]
//Array[undefined]
//Array[undefined]
//Array[undefined]
//Array[undefined]
//Array[undefined]
我不知道出了什么问题,请帮忙。
解决方案
尝试这个:
let object = {
a: 'a',
b: 'b',
c: 'c',
d: 'd',
e: 'e',
};
object[Symbol.iterator] = function () {
let keys = Object.keys(this);
let count = 0;
return {
next() {
if (count === keys.length) {
return {
value: null,
done: true,
};
}
let value = keys[count];
count++;
return {
value,
done: false,
};
},
};
};
for (let each of object) {
console.log([each]);
}
请注意错误是:let value=this[keys[count]];
和if (count > keys.length)
推荐阅读
- android - 引起:java.lang.ClassNotFoundException:找不到类“android.webkit.SafeBrowsingResponse”
- jquery - Jquery click 不适用于动态添加的链接
- javascript - 如何防止 recaptcha__en.js 多次加载?
- java - 每次游戏渲染一个好主意时都设置 BufferStrategy 吗?
- javascript - Express - 使用 bcrypt 异步提交到数据库
- c# - 当前上下文中不存在该名称 - Methodes
- php - 根据 Laravel 中不同表中的值动态创建标记/未标记的复选框
- angular - 离子2迭代数组中的元素
- ios - 从 Swift 中的 documentDirectory 中删除所有文件
- sql-server - SQL Server 将两个日期合并为一行