实现keys
Object._keys = function(obj) {
let res = [];
for (let name in obj) {
if (obj.hasOwnProperty(name)) res.push(name);
}
return res;
}
实现entries
Object._entries = function (obj) {
let res = [];
for (let name in obj) {
if (obj.hasOwnProperty(name)) res.push([name, obj[name]]);
}
return res;
}
实现 Symbol.iterator
实现fromEntries前,先实现Symbol.iterator
class ArrayIterator {
constructor(value) {
this.start = 0;
this.value = value;
}
next() {
if (this.start < this.value.length) {
return { value: this.value[this.start++], done: false }
}
return { value: undefined, done: true }
}
}
Array.prototype[Symbol.iterator] = function() {
return new ArrayIterator(this);
}
实现fromEntries
Object._fromEntries = function(iterable) {
const it = iterable[Symbol.iterator]();
let res = {}, t = it.next();
while(!t.done) {
res[t.value[0]] = t.value[1];
t = it.next();
}
return res;
}