如何在JavaScript中循环获取嵌套对象子键并删除指定内层键
解决方案:获取并删除指定内层键
你的代码目前只遍历了外层的分类键,没有深入到每个分类下的内层对象,而且delete (key)的写法完全无效——这里的key是外层分类的字符串,根本不是内层对象的属性。要实现获取并删除内层的0、1、2、3、4键,你需要嵌套遍历,并针对正确的对象属性执行删除操作。
修正后的代码
const jsondata = { "Automobile Assembler": { "0": "Sazgar Engineering Works Ltd: 147.25", "1": "Pak Suzuki Motor Co. Ltd: 165.07", "2": "Millat Tractors Ltd: 724.80", "3": "Indus Motor Company Ltd: 956.42", "4": "Hinopak Motors Ltd: 360.00", "5": "Honda Atlas Cars(Pakistan) Ltd: 198.07", "6": "Ghandhara Nissan Ltd:64.93", "7": "Ghandhara Industries Ltd: 120.40", "8": "Ghani Automobile Industries Ltd: 5.80", "9": "Dewan Farooque Motors Ltd: 4.32", "10": "Atlas Honda Ltd: 392.50", "11": "Al - Ghazi Tractors Ltd:353.21" }, "Automobile Parts & Accessories": { "12": "Loads Limited: 15.00", "13": "Thal Ltd:335.00", "14": "The General Tyre & Rubber Company Ltd: 60.12", "15": "Exide Pakistan Ltd:283.16", "16": "Baluchistan Wheels Ltd: 62.00", "17": "Bela Automotives Ltd: 1.30", "18": "Atlas BatteryLtd: 174.02", "19": "Dewan Automotive Engineering Ltd: 3.26", "20": "Agriauto Industries Ltd: 187.79" } }; // 定义要获取并删除的目标内层键(注意是字符串类型,因为原对象的键是字符串) const targetInnerKeys = ['0', '1', '2', '3', '4']; // 遍历外层每个分类 Object.keys(jsondata).forEach(categoryKey => { const categoryItems = jsondata[categoryKey]; // 遍历目标键,逐个处理 targetInnerKeys.forEach(key => { // 先检查当前分类下是否存在这个键,避免报错 if (categoryItems.hasOwnProperty(key)) { // 获取并打印键和对应的值,满足"获取"需求 console.log(`内层键 ${key} 的值:${categoryItems[key]}`); // 删除该键 delete categoryItems[key]; } }); }); // 可选:打印修改后的对象,验证删除结果 console.log('修改后的数据集:', jsondata);
代码说明
- 目标键数组:因为原对象的内层键是字符串类型的数字(比如
"0"而非数字0),所以我们用字符串数组定义要处理的键。 - 嵌套遍历:先遍历外层的每个分类,拿到分类下的内层对象;再遍历目标键数组,处理每个内层键。
- 安全检查:用
hasOwnProperty判断内层对象是否包含目标键,避免尝试删除不存在的属性导致意外问题。 - 正确删除:通过
delete categoryItems[key]删除内层对象的属性,这才是针对目标对象的有效删除操作。
原代码的核心错误
- 只遍历了外层分类键,没有进入内层对象处理具体的键。
delete (key)操作的是外层分类的字符串变量,而非内层对象的属性,完全达不到删除内层键的效果。
内容的提问来源于stack exchange,提问作者Faizan Ahmed
相关产品推荐
相关产品推荐

