React/JavaScript中过滤对象(排除label为c的项)的正确实现
问题描述
给定如下对象:
{ first : { label :"a" , status : true , text: "dummy" }, second : { label :"b" , status : true , text: "dummy" }, third : { label :"c" , status : false , text: "dummy" } }
需要将该对象转换为新对象,排除其中label为"c"的属性项。
尝试用map方法实现但写法有误:
const newData = data && data.map(item => { if(item.label !=='c') { return { ...item, }; } });
期望得到的结果:
{ first : { label :"a" , status : true , text: "dummy" }, second : { label :"b" , status : true , text: "dummy" } }
正确实现方案
首先要明确:map是数组的原型方法,对象没有这个方法,直接调用data.map会报错,必须先把对象转换为可遍历的结构再处理。以下是几种可行的实现方式:
方法1:Object.entries + reduce(兼容性较好)
先把对象转成键值对数组,再用reduce过滤并重组新对象:
const data = { first : { label :"a" , status : true , text: "dummy" }, second : { label :"b" , status : true , text: "dummy" }, third : { label :"c" , status : false , text: "dummy" } }; const newData = Object.entries(data).reduce((result, [key, value]) => { if (value.label !== 'c') { result[key] = value; } return result; }, {});
方法2:Object.fromEntries(ES2019+,写法更简洁)
过滤键值对数组后,直接转成对象:
const newData = Object.fromEntries( Object.entries(data).filter(([key, value]) => value.label !== 'c') );
方法3:传统遍历写法(兼容旧环境)
直接遍历对象的键名,手动筛选并赋值:
const newData = {}; for (const key in data) { // 确保只处理对象自身的属性,避免遍历原型链上的属性 if (data.hasOwnProperty(key) && data[key].label !== 'c') { newData[key] = data[key]; } }
内容的提问来源于stack exchange,提问作者John Ken
相关产品推荐
相关产品推荐

