js for in 自增递归 2019-02-13 前端 暂无评论 2230 次阅读 今天在写项目的时候,需要做一个自增递归,递归嘛,简单,`for` 循环不就解决了? ```javascript let arr = [0]; for (let i = 0; i < arr.length; i++) { arr.push(arr[i]++); } ``` ---- 什么?是要递归一个对象?那就用 `for in` 嘛(以下代码为错误代码,请勿尝试) ```javascript let obj = {0:0}; for (let key in obj) { obj[+key+1] = obj[key]++ } ``` 等等,为什么只循环了一次?好吧,对象的自增貌似不能用 `for in`,这可怎么办? ---- 开始尝试一个简单粗暴的笨方法 ```javascript let obj = {0:0}; let arr = [0] for (let i = 0; i < arr.length; i++) { let key = arr[i]; obj[+key+1] = obj[key]++; arr.push(+key+1); } ``` [牛牛大佬](https://cowsay.blog) 提供的思路: ```javascript const testObj = { a: 1, b: 2 } function* keys (obj) { let cur = 0 const queue = Object.keys(obj) while (queue[cur]) { yield queue[cur++] // find new keys for (let newKey of Object.keys(obj)) { if (!queue.includes(newKey)) { queue.push(newKey) } } } } for (let item of keys(testObj)) { console.log(item) if (item === 'a') { testObj.inserted = true } } // Output: // "a" // "b" // "inserted" ``` 标签: none 本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。