如何在JSON.stringify中忽略特定层级的键值对 | JavaScript
解决方法
直接利用replacer函数里的this上下文区分顶层对象和嵌套对象,就能精准过滤顶层的id,同时保留嵌套层级的id,完全不用创建新对象。
具体代码修改如下:
let student = { id: 1, // 要跳过这个id name: 'John', age: 30, isAdmin: false, courses: ['html', 'css', 'js'], package: { id: 121, // 要保留这个id name: "starter", price: 15 }, spouse: null }; let str = JSON.stringify(student, function(key, value) { // 仅当当前键是'id',且所属对象是顶层的student时才忽略 if (key === 'id' && this === student) { return undefined; } return value; }); console.log(str);
原理说明
JSON.stringify的replacer函数处理对象属性时,this会指向当前属性所属的父对象:
- 处理顶层的
id时,this指向整个student对象,触发条件返回undefined,让JSON.stringify忽略这个键值对 - 处理
package里的id时,this指向package对象,和顶层的student不相等,直接返回原值保留该键值对
这样就完美实现需求,全程不需要复制或修改原对象。
内容的提问来源于stack exchange,提问作者Sachin Kumar
相关产品推荐
相关产品推荐

