如何用for/foreach修改JSON值?我的循环代码无输出排查
问题分析与修复
你的代码核心问题出在变量作用域的错误引用上,导致循环根本没有执行,所以控制台看不到任何日志输出。
具体问题点
你用var duce2 = [...]声明了一个变量,但在循环里却访问了this.duce2——如果你的代码不是在类方法、Vue组件这类有明确this上下文的环境中,this在浏览器里默认指向全局对象window,而window里并没有duce2这个属性,所以this.duce2的值是undefined。用for...in循环遍历undefined会直接跳过整个循环,自然不会触发任何console.log。
修复后的代码
只需要把循环里的this.duce2改成你声明的变量名duce2即可:
var duce2 = [{ "pages": "foo1", "hasil": "" }, { "pages": "foo2", "hasil": "" }, { "pages": "foo3", "hasil": "" }, { "pages": "foo4", "hasil": "" }, { "pages": "foo5", "hasil": "" }, { "pages": "foo6", "hasil": "" } ]; for (let key in duce2) { console.log("jalan ga fornya"); if (duce2[key].pages == 'foo2') { console.log("jalan ga ifnya"); duce2[key].hasil = '1'; } } console.log(duce2);
额外优化建议
虽然for...in可以遍历数组,但它原本是为遍历对象属性设计的,可能会意外遍历到数组原型链上的自定义属性。更推荐用数组专用的遍历方法,比如forEach:
duce2.forEach(item => { console.log("jalan ga fornya"); if (item.pages === 'foo2') { // 这里推荐用严格相等===,避免隐式类型转换问题 console.log("jalan ga ifnya"); item.hasil = '1'; } });
这样代码更简洁,也更符合数组遍历的最佳实践。
内容的提问来源于stack exchange,提问作者flix
相关产品推荐
相关产品推荐

