[Javascript] Iterate over Object

const [a, b] = {
  a: 3,
  b: 4,
}; 
console.log(a, b); // TypeError: {(intermediate value)(intermediate value)} is not iterable

 

How to make it work without touch original code?

We need to use [Symbol.iterator] for Object.prototype;

Object.prototype[Symbol.iterator] = function() {
    const values = Object.values(this)
    let index = 0
    const len = values.length
    return {
        next() {
           return {
               value: values[index++],
               done: index <= len ? false: true
           }
        }
    }
}
const [a, b] = {
  a: 3,
  b: 4,
};
console.log(a, b);

We can improve this version by knowing const values = Object.values(this)is already a iterable.

 

Object.prototype[Symbol.iterator] = function() {
    const values = Object.values(this)
    return values[Symbol.iterator]()
}
const [a, b] = {
  a: 3,
  b: 4,
};
console.log(a, b);

We can improve this version by using generator.

 

Object.prototype[Symbol.iterator] = function* () {
  yield* Object.values(this);
};

const [a, b] = {
  a: 3,
  b: 4,
};
console.log(a, b);

 

posted @   Zhentiw  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2023-11-06 [VM] Deopt code
2020-11-06 [Kotlin spring boot] Work with database
2018-11-06 [Tools] Convert SVG to a PDF in Node with PDFKit and SVG.js
2018-11-06 [Javascript] Cancel A Promise Using AbortController
2018-11-06 [Testing] JavaScript Mocking Fundamentals
2017-11-06 [React Native] Animate the Scale of a React Native Button using Animated.spring
2017-11-06 [React] Use the URL as the source of truth in React
点击右上角即可分享
微信分享提示