如何从嵌套JavaScript对象中提取第一层对象的所有属性
提取嵌套对象的第一层属性(最外层id=43的对象属性)
嘿,这个需求太常见啦!要拿到最外层那个id为43的对象的所有直接属性(不管里面嵌套的对象/数组内容),有好几种简单的方法,我给你一一演示:
方法1:浅拷贝(最快捷)
如果只是想快速复制第一层属性,用对象展开运算符或者Object.assign就搞定了——它们只会复制对象的第一层键值对,嵌套的内容还是原引用,但完全满足你提取第一层属性的需求:
// 假设你的最外层对象叫rootObj const rootObj = { id: 43, name: 'ajajaj', nestedObj1: { /* ...你的嵌套内容... */ }, foo0: '...' }; // 方法A:展开运算符 const firstLevelProps = { ...rootObj }; // 方法B:Object.assign const firstLevelProps = Object.assign({}, rootObj);
这两种方式得到的firstLevelProps就是最外层对象的所有第一层属性,和原对象的第一层内容完全一致。
方法2:遍历自有属性(更灵活)
如果你需要对第一层属性做额外处理(比如过滤掉某些属性),可以用Object.keys或者Object.getOwnPropertyNames来遍历:
// 提取所有可枚举的自有第一层属性 const firstLevelProps = Object.keys(rootObj).reduce((result, key) => { result[key] = rootObj[key]; return result; }, {}); // 如果要包括不可枚举的自有属性,用Object.getOwnPropertyNames const allFirstLevelProps = Object.getOwnPropertyNames(rootObj).reduce((result, key) => { result[key] = rootObj[key]; return result; }, {});
比如你想排除某个属性(比如foo0),只需要在reduce里加个判断:
const filteredProps = Object.keys(rootObj).reduce((result, key) => { if (key !== 'foo0') { // 排除foo0属性 result[key] = rootObj[key]; } return result; }, {});
方法3:解构赋值(适合已知属性名的场景)
如果已经明确知道最外层对象的所有属性名,用解构赋值也很直观:
const { id, name, nestedObj1, foo0 } = rootObj; const firstLevelProps = { id, name, nestedObj1, foo0 };
不过这种方法不够灵活,如果属性名是动态的,还是前面的方法更实用。
注意点
- 这些方法都不会修改原对象,都是生成新的对象来存放第一层属性。
- 如果嵌套对象/数组需要深拷贝,那是另一个需求,但你只需要提取第一层属性的话,浅拷贝完全够用。
内容的提问来源于stack exchange,提问作者Joe Grizz
相关产品推荐
相关产品推荐

