关于处理对象中 value 为 null 值的函数问题

有这样一个需求就是 要把 数组或者object 中的 value 为 null 的值都替换成指定的字符串
比如说

let obj = {name:null,age:12}

处理之后就要变成 // {name:'',age:12}

可支持深度监听

let obj = [{name:null,age:{max:null,min:12}}]

处理之后就要变成 //[{name:'',age:{max:'',min:12}}]

我自己实现的方式如下,请各位大佬看下还有什么可以优化 或者 有漏洞需要改进的地方 请不吝指教!!!

    //工具函数

function isObject(obj) {

return Object.prototype.toString.call(obj) === '[object Object]';

}

function isArray(arr) {

return Object.prototype.toString.call(arr) === '[object Array]';

}

function isArrayOrObject(target){

return isObject(target) || isArray(target)

}

/**

* @desc 过滤数组或者对象中的 null 值

* @param {Array|Object} target -待替换的数组或者对象

* @param {boolean} deep -是否深度递归

* @param {any} filter -null被替换的变量字符串

* @return target:any 被处理过的对象

*/

function filterObjectNull(target, filter = '', deep = false) {

const IS_ARRAY_OBJECT = isArrayOrObject(target);//判断是否是数组或者对象

if(!IS_ARRAY_OBJECT) return target;

//target 是数组遍历处理

if ((target) instanceof Array) {

return target.map(item => filterObjectNull(item, filter,deep))

}

//target 是对象 直接处理

if ((target) instanceof Object) {

return Object.fromEntries(Object.entries(target).map(

([key,value]) => {

//深度递归

if (deep) {

if (isArrayOrObject(value)) value = filterObjectNull(value, filter,deep)

}

return [key, value === null ? filter : value]

}))

}

}

//测试

let res = filterObjectNull({

name: [{

max: {

age: {

lin:{

a:null

}

}

}

}],

data: undefined

},'',true)

console.log(res)

回答

可以用正则的方式替换

JSON.stringify([{name: null,age:{max: null,min:12}}]).replace(/"[a-zA-Z0-9_]{1,}":\s{0,}null/g, match => match.replace('null', 'targetStr'))

var mt = {}

mt.removeNull = (item, newValue) => {

for (var n in item) {

var value = item[n]

// 如果 item 为 object 递归循环后覆盖原来的值

// 如果 item 为值的情况下直接设置为 newValue

if (typeof value === 'object' && value !== null) {

item[n] = mt.removeNull(value,newValue)

} else {

item[n] = value || newValue

}

}

return item

}

image.png

以上是 关于处理对象中 value 为 null 值的函数问题 的全部内容, 来源链接: utcz.com/a/38277.html

回到顶部