用javascript实现Object中的keys、entries、fromEntries

168 阅读1分钟

实现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;
}