{"version":3,"sources":["../src/object/forEachUpdateObject.ts"],"names":["forEachUpdateObject","obj","filter","updater","options","opts","assignObject","forEachObject","value","parent","keyOrIndex","newValue","ABORT"],"mappings":";;;;AAsBO,SAASA,CAA2BC,CAAAA,CAAAA,CAAmBC,CAAwBC,CAAAA,CAAAA,CAAyBC,EAAgC,CAC3I,IAAIC,CAAOC,CAAAA,CAAAA,CAAa,CACpB,aAAA,CAAc,IAClB,CAAA,CAAEF,CAAO,CACT,CAAA,OAAAG,GAAcN,CAAAA,CAAAA,CAAI,CAAC,CAAC,KAAAO,CAAAA,CAAAA,CAAM,OAAAC,CAAO,CAAA,UAAA,CAAAC,CAAU,CAAA,GAAI,CAC3C,IAAIC,CAAAA,CAAWH,CACf,CAAA,GAAG,SAAON,CAAS,EAAA,UAAA,EACZ,CAACA,CAAAA,CAAO,CAAC,KAAA,CAAAM,CAAM,CAAA,MAAA,CAAAC,EAAO,UAAAC,CAAAA,CAAU,CAAC,CAAA,CAAA,CAKxC,IADAC,CAAWR,CAAAA,CAAAA,CAAQ,CAAC,KAAA,CAAAK,EAAM,MAAAC,CAAAA,CAAAA,CAAO,UAAAC,CAAAA,CAAU,CAAC,CAAA,CACzCC,CAAUC,EAAAA,GAAAA,CACT,OAAOA,GAEJH,CAAAA,CAAAA,EAAUC,CACRD,GAAAA,CAAAA,CAAeC,CAAiB,CAAIC,CAAAA,CAAAA,EAAAA,CAGjD,CAAEN,CAAAA,CAAI,EACCJ,CACX","file":"chunk-QQZQLURE.mjs","sourcesContent":["import { Collection } from \"../types\"\nimport { assignObject } from \"./assignObject\"\nimport { ABORT, forEachObject, ForEachObjectOptions } from \"./forEachObject\"\n\n/**\n * 深度遍历对象成员,当值满足条件时,调用updater函数的返回值来更新值\n \n * let data ={a:1,b:2,l:[1,2,3],c:\"xx\"}\n * forEachUpdateObject(data,({value,parent,keyOrIndex})=>{\n *     return typeof(value)==\"string\"\n * },({value,parent,keyOrIndex})=>{\n *      return value.toUpperCase\n * })\n * \n * @param {*} obj \n * @param {*} updater(value,parent,keyOrIndex)   返回值用来替换目标值\n * @param {*} filter(value,parent,keyOrIndex)    可选的过滤函数，只有返回值=true的项才会进行更新\n *         当指定该函数时,会在调用updater时先调用此函数,如果返回true则更新,否则不更新\n * @returns \n */\nexport type IForEachCallback = ({value,parent,keyOrIndex}:{value?:any,parent?:Collection| null,keyOrIndex?:string | symbol | number | null})=>any\n    \nexport function forEachUpdateObject<T=any>(obj:any[] | object,filter:IForEachCallback,updater:IForEachCallback,options?:ForEachObjectOptions):T{       \n    let opts = assignObject({\n        onlyPrimitive:true\n    },options)\n    forEachObject(obj,({value,parent,keyOrIndex})=>{\n        let newValue = value\n        if(typeof(filter)=='function'){\n            if(!filter({value,parent,keyOrIndex})){\n                return \n            }\n        }\n        newValue = updater({value,parent,keyOrIndex})    \n        if(newValue==ABORT){\n            return ABORT\n        }else{\n            if(parent && keyOrIndex){\n                (parent as any)[keyOrIndex as any] = newValue\n            }\n        }\n    },opts)\n    return obj as T\n} \n\n\n\n// export function forEachUpdateObject<T=any>(obj:any[] | object,filter:IForEachCallback,updater:IForEachCallback):T{\n//     function forEachUpdateItem(parent:any[] | object | null,keyOrIndex:string | number | null,value:any){\n//         if(Array.isArray(value)){\n//             for(let i=0;i<value.length;i++){\n//                 value[i] = forEachUpdateItem(value,i,value[i])\n//             }\n//             return value\n//         }else if(isPlainObject(value)){\n//             for(let [k,v] of Object.entries(value)){\n//                 value[k] = forEachUpdateItem(value,k,v)\n//             }\n//             return value\n//         }else{\n//             if(typeof(filter)=='function'){\n//                 if(filter({value,parent,keyOrIndex})){\n//                     return updater({value,parent,keyOrIndex})\n//                 }else{\n//                     return value\n//                 }\n//             }else{\n//                 return updater({value,parent,keyOrIndex})\n//             }\n//         }\n//     }\n//     forEachUpdateItem(null,null,obj)\n//     return obj as T\n// }\n"]}