咨询:是否存在返回对象数组而非二维数组的Object.entries()原生替代方法
回答
好问题!我完全懂你想要的效果——一个原生方法能直接把对象转换成包含键值对对象的数组,而不是像Object.entries()那样返回二维数组,还希望在合适的场景下保留原属性的引用。
遗憾的是,目前JavaScript原生并没有提供这样的内置方法。原生的Object.keys()、Object.values()、Object.entries()都是针对基础遍历需求设计的:
Object.keys()只返回键名组成的数组Object.values()只返回属性值组成的数组Object.entries()返回二维键值对数组,是为了方便配合for...of或数组方法快速处理键值对,但确实不是你想要的对象数组结构。
不过你说的自定义实现思路完全可行,而且写起来很简单,还能完美保留引用(针对引用类型的属性值)。比如这个工具函数:
function objToKeyValueArray(obj) { return Object.entries(obj).map(([key, value]) => ({ key, value })); }
测试一下引用保留的效果:
const myObj = { user: { name: 'Alice' }, age: 30 }; const arr = objToKeyValueArray(myObj); // 修改数组里的引用类型属性 arr[0].value.name = 'Bob'; console.log(myObj.user.name); // 输出 'Bob',说明引用确实保留了
如果你需要更定制化的结构(比如把键名字段改成prop而非key),只需要调整map里的返回对象就行,灵活性很高。
内容的提问来源于stack exchange,提问作者Karric
相关产品推荐
相关产品推荐

