使用Object.keys()获取对象键返回对象而非数组的问题求助
问题分析与解决方案
嘿,我来帮你梳理下这个问题~首先得明确一个关键点:Object.keys()方法本身就会返回一个由对象键名组成的字符串数组,比如你给出的示例对象:
const obj = { "archive": null, "branchs_id" : "5", "code": "12344" }; console.log(Object.keys(obj)); // 输出:["archive", "branchs_id", "code"]
所以你说它返回的是对象,大概率是误解了控制台的显示形式,或者代码里某个环节出了小问题。
咱们一步步排查你的代码:
1. 先检查变量拼写与有效性
你的代码里有个疑似拼写错误:objecType是不是应该是objectType?如果变量名写错了,response[objecType + 's']可能拿到的不是你预期的对象集合,导致firstObject不是目标对象。建议先加日志确认:
let firstObject = response[objecType + 's'][0]; console.log('当前获取的对象:', firstObject); // 确认这是你要处理的目标对象 console.log('Object.keys返回结果:', Object.keys(firstObject)); // 这里肯定是数组格式
2. 移除不必要的forceUpdate()
setState()本身就会触发组件的重新渲染,你在回调里调用__this.forceUpdate()完全是多余的,反而可能引发不必要的渲染问题,直接去掉就好:
// 先修正变量名拼写(如果确实写错了) let firstObject = response[objectType + 's'][0]; __this.setState({ attributes: Object.keys(firstObject) });
3. 确认后续使用attributes的方式
如果你还是觉得attributes是对象,可能是后续遍历/使用它的时候用错了方式。数组应该用map、forEach这类数组方法处理,而不是像对象那样用.访问:
// 正确遍历attributes数组的示例 this.state.attributes.forEach(key => { console.log('对象的键名:', key); });
极端情况:强制转为数组(其实没必要)
如果真的遇到了特殊兼容场景(可能性极低),可以用Array.from()再包装一层确保是数组:
__this.setState({ attributes: Array.from(Object.keys(firstObject)) });
总的来说,核心问题是你对Object.keys()的返回值有误解,它本身就是数组。先排查变量是否正确,再确认控制台的输出形式(有时候控制台会把数组展开显示,看起来像对象,但本质还是数组)。
内容的提问来源于stack exchange,提问作者Emmanuel Scarabin
相关产品推荐
相关产品推荐

