如何根据键数组批量删除对象数组中的指定键?
解决数组对象批量删除指定键的问题
你的代码无法生效的核心原因是:filter函数接收的data是数组,你用for(var i in data)遍历的是数组的索引(比如0、1),而非数组内每个对象的键,因此根本没对目标对象做任何处理。
下面提供几种可行的实现方案:
方案1:原地修改原数组对象
直接遍历数组中的每个对象,删除指定键,适合不需要保留原数据的场景:
const sections = [ { municipality: "Monte De Oca", office: "Oficina de la Mujer" }, { case_number: "MDO-ABCDEFG", identification: "Cédula", id_number: "123456789" } ]; const removeThis = ["municipality", "id_number"]; function filterObjects(arr, keysToRemove) { arr.forEach(obj => { keysToRemove.forEach(key => { if (obj.hasOwnProperty(key)) { delete obj[key]; } }); }); return arr; } console.log(filterObjects(sections, removeThis));
方案2:生成新数组(不修改原数据)
如果需要保留原数组和对象,可通过map创建新对象,排除不需要的键:
const sections = [ { municipality: "Monte De Oca", office: "Oficina de la Mujer" }, { case_number: "MDO-ABCDEFG", identification: "Cédula", id_number: "123456789" } ]; const removeThis = ["municipality", "id_number"]; function filterObjects(arr, keysToRemove) { return arr.map(obj => { const filteredObj = {}; Object.keys(obj).forEach(key => { if (!keysToRemove.includes(key)) { filteredObj[key] = obj[key]; } }); return filteredObj; }); } console.log(filterObjects(sections, removeThis));
大规模数组的性能优化
若处理的数组规模极大,建议将removeThis转为Set,把键的查找时间从O(n)优化为O(1),同时用for...in提升遍历效率:
const sections = [/* 大规模对象数组 */]; const removeThis = new Set(["municipality", "id_number"]); function filterObjects(arr, keysToRemoveSet) { return arr.map(obj => { const filteredObj = {}; for (const key in obj) { if (obj.hasOwnProperty(key) && !keysToRemoveSet.has(key)) { filteredObj[key] = obj[key]; } } return filteredObj; }); }
内容的提问来源于stack exchange,提问作者rgfx
相关产品推荐
相关产品推荐

