如何从对象中删除数组属性?删除period_to/period_from属性失败求助
解决无法删除对象属性的问题
看起来你在尝试删除result对象里的period_to和period_from属性,但用delete操作符没成功对吧?我来帮你分析几种可能的原因和对应的解决办法:
首先排查基础问题
确认属性是否真的存在于对象中
在执行delete之前,先打印对象或者直接检查属性存在性:console.log(result); // 精准检查属性是否存在 console.log('period_to' in result); // 返回true才说明属性存在如果返回
false,大概率是表单字段的name值和你写的不一致(比如拼写错误、大小写问题,或是表单里的name是periodTo而非period_to),先去核对循环里的ch[i].name是不是正确的。检查
delete的语法是否正确
你代码里写的delete result.period_to是正确语法,但如果不小心写成delete.period_to(把delete当成对象来调用)肯定会报错,这点你已经写对了,可以排除这个问题。
如果属性存在但delete无效
这种情况大概率是属性被设置为**不可配置(non-configurable)**了——比如通过Object.defineProperty定义的属性,当configurable设为false时,delete操作会失败(严格模式下抛出错误,非严格模式返回false)。
这时候推荐用对象解构赋值创建一个排除目标属性的新对象,比delete更可靠:
// 解构出不需要的属性,剩余属性自动存入newResult const { period_to, period_from, ...newResult } = result; // 之后直接使用newResult即可
额外优化你的代码
另外,你原来通过两个数组formkey和formval构建对象的写法可以简化,不用额外数组,直接循环或用reduce构建:
function someData(data) { // 方式1:循环构建 const result = {}; for (const item of data) { result[item.name] = item.value; } // 方式2:用reduce更简洁 // const result = data.reduce((acc, item) => ({ ...acc, [item.name]: item.value }), {}); // 直接解构移除所有不需要的属性 const { table, redirect_to, dbres, period_to, period_from, ...cleanResult } = result; return cleanResult; }
这样既简化了代码,也能确保目标属性被彻底排除。
内容的提问来源于stack exchange,提问作者Augustine Sefa
相关产品推荐
相关产品推荐

