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