JavaScript遍历对象将数组属性转字符串时修改未生效问题
问题根因
你的代码没生效是三个问题导致的:
Array.prototype.toString()只会返回数组转换后的字符串结果,不会原地修改原数组,你调用方法后没有把返回值重新赋值给对象属性,等于执行了无效操作。- 你贴的复现代码存在语法错误:
c: false末尾缺失逗号,直接运行会抛语法错误,根本执行不到后续遍历逻辑。 - 你当前逻辑直接操作原对象,不符合你需要「保留原对象、生成修改后副本」的需求;额外加的
length > 0判断会跳过空数组属性d,如果需求是所有数组类型属性都要转字符串,这个判断需要移除(空数组调用toString()会返回空字符串"")。
正确实现
先对原对象做浅拷贝生成副本,再遍历副本的属性,把数组类型的属性替换为转换后的字符串即可,参考代码:
const object1 = { a: ["TX", "CA", "LA"], b: 42, c: false, d: [] }; // 生成原对象的浅副本,避免修改原始数据 const targetObj = { ...object1 }; for (const [key, value] of Object.entries(targetObj)) { if (Array.isArray(value)) { // 将转换结果赋值回对应属性 targetObj[key] = value.toString(); } } console.log(object1); // 原对象保持不变 console.log(targetObj); /* 输出符合预期的结果: { a: "TX,CA,LA", b: 42, c: false, d: "" } */
补充说明:如果数组元素包含对象、嵌套数组这类非基础类型,
toString()会返回[object Object]这类不符合预期的结果,你可以根据接口要求替换为JSON.stringify(value)做序列化转换。
内容的提问来源于stack exchange,提问作者CourtneyJ
相关产品推荐
相关产品推荐

