JS for/in遍历对象时向数组插入多个相同对象问题排查
问题根因
你把newObject的声明放在了for循环外部,JS中对象是引用类型,你每次循环修改的都是同一个内存地址的对象属性,数组push的也只是这个对象的引用而非新对象,遍历结束后所有引用指向的都是最后一次赋值的对象,就会出现全量重复的情况。
修复方案(原生for/in写法)
把newObject的声明移到循环内部,每次循环都生成新的独立对象:
const myfunction = () => { var newArray = [] var firstobj = myobject['Time Series (5min)'] for (var key in firstobj) { // 每次循环新建独立对象 var newObject = {} newObject.x = key.substr(11, 19) newObject.y = firstobj[key]['4. close'] newArray.push(newObject) } return newArray }
更简洁的实现方案
用Object.entries+Array.map链式调用,不需要手动维护循环和空数组,代码更精简:
const myfunction = () => { return Object.entries(myobject['Time Series (5min)']) .map(([timeKey, timeValue]) => ({ x: timeKey.substr(11, 19), y: timeValue['4. close'] })) }
内容的提问来源于stack exchange,提问作者Chris Canin
相关产品推荐
相关产品推荐

