javascript去掉对象或数组中的’’,null,undefined,[],{}。
思路就是创建一个新的空对象,然后对传入的对象进行遍历,只把符合条件的属性返回,保留有效值,然后就相当于把空值去掉了。
(可以根据注释来修改方法决定要去除哪些属性)
function removeEmptyField(obj) {var newObj = {}if (typeof obj === 'string') {obj = JSON.parse(obj)}if (obj instanceof Array) {newObj = []}if (obj instanceof Object) {for (var attr in obj) {// 属性值不为'',null,undefined才加入新对象里面(去掉'',null,undefined)if (obj.hasOwnProperty(attr) && obj[attr] !== '' && obj[attr] !== null && obj[attr] !== undefined) {if (obj[attr] instanceof Object) {// 空数组或空对象不加入新对象(去掉[],{})if(JSON.stringify(obj[attr]) === '{}' || JSON.stringify(obj[attr]) === '[]') {continue}// 属性值为对象,则递归执行去除方法newObj[attr] = removeEmptyField(obj[attr])} else if (typeof obj[attr] === 'string' &&((obj[attr].indexOf('{') > -1 && obj[attr].indexOf('}') > -1) ||(obj[attr].indexOf('[') > -1 && obj[attr].indexOf(']') > -1))) {// 属性值为JSON时try {var attrObj = JSON.parse(obj[attr])if (attrObj instanceof Object) {newObj[attr] = removeEmptyField(attrObj)}} catch (e) {newObj[attr] = obj[attr]}} else {newObj[attr] = obj[attr]}}}}return newObj}const testObj = {a: '',b: 123,c: null,d: undefined,e: [],f: [1,2,3,'',null],g: {},h: {x:1,y:'',z:null}}console.log(removeEmptyField(testObj))console.log(JSON.stringify(removeEmptyField(testObj)))
