基于键从对象数组中移除对象的ES6实现方案咨询
解决对象数组中按指定键移除元素的问题
我来帮你修正代码,实现按指定键移除数组中对应对象的需求~
首先先分析你之前代码的问题:你尝试用r.o !== o来判断,但这里的o是一个键名变量,你不能用点语法(.)来访问对象的动态属性,得用方括号语法;另外,你的逻辑也没准确判断对象是否包含要移除的键。
针对你的场景(每个对象只有一个键),这里有两种简洁的ES6实现方式:
方法1:通用型(适用于对象可能有多个键的情况)
如果要移除包含指定键的对象,用hasOwnProperty配合filter过滤:
const arrayOfObj = [{All: true}, {Sports: true}, {Entertainment: true}]; const keyToRemove = 'All'; // 过滤掉包含keyToRemove的对象 const filteredArray = arrayOfObj.filter(item => !item.hasOwnProperty(keyToRemove)); console.log(filteredArray); // 输出: [{Sports: true}, {Entertainment: true}]
方法2:针对单键对象的优化
因为你的数组里每个对象只有一个键,也可以直接取出对象的唯一键来对比:
const arrayOfObj = [{All: true}, {Sports: true}, {Entertainment: true}]; const keyToRemove = 'All'; const filteredArray = arrayOfObj.filter(item => { // 取出对象的第一个(也是唯一的)键 const itemKey = Object.keys(item)[0]; return itemKey !== keyToRemove; }); console.log(filteredArray); // 输出预期结果
为什么你的原代码不生效?
你原代码里的r.o是错误的写法,因为o是变量名,要访问对象的动态属性必须用r[o];另外你没判断这个键是否存在于当前对象中,逻辑上也不严谨。上面两种方法都能准确实现你的需求,根据实际场景选就行~
内容的提问来源于stack exchange,提问作者karty
相关产品推荐
相关产品推荐

