如何在console.log()内移除对象指定键并输出修改后的对象?
在console.log里直接移除对象属性并输出结果
现有对象:
let obj= { 'Cow' : 'Moo', 'Cat' : 'Meow', 'Dog' : 'Bark' };
想要执行console.log(JSON.stringify(obj_without_Cow)),直接输出移除Cow键后的对象:
{ 'Cat' : 'Meow', 'Dog' : 'Bark' }
已知能用delete、剩余解构这些方法,但就想只在console.log()内部搞定,不用额外写外部代码。就像处理字符串str='xxxyyy'时,直接用console.log(str.replaceAll('x',''))就能移除所有x,但试了console.log(delete obj.Cow)只会返回布尔值,不是修改后的对象,所以求可行办法。
方法1:用剩余解构生成新对象
直接在console.log里写个箭头函数,解构原对象把Cow踢出去,剩下的组成新对象:
console.log(JSON.stringify(({ Cow, ...rest }) => rest)(obj))
要是不想留Cow这个变量名,也可以用下划线占位:
console.log(JSON.stringify(({ Cow: _, ...rest }) => rest)(obj))
说白了就是临时写个函数,把原对象传进去,函数内部解构出Cow(不用就占位),剩下的属性打包成rest返回,直接把这个返回值传给JSON.stringify。
方法2:转数组过滤后转回对象
先把对象拆成键值对数组,过滤掉Cow那一项,再重新拼成对象:
console.log(JSON.stringify(Object.fromEntries(Object.entries(obj).filter(([key]) => key !== 'Cow'))))
步骤很简单:Object.entries(obj)把对象变成[['Cow','Moo'], ['Cat','Meow'], ...]这种数组,filter把键是Cow的项删掉,最后Object.fromEntries把过滤后的数组变回对象。
小提醒
这两种方法都不会改动原对象obj,都是生成新对象输出,不用担心影响原来的数据。要是要删多个属性,改下解构的变量或者过滤条件就行。
内容的提问来源于stack exchange,提问作者marko-36
相关产品推荐
相关产品推荐

