Я бы написал более общую функцию deepMap
и затем вызвал бы ее с trimText
и вашим объектом. Затем он становится легко используемым и отделяет обработку навигации по объекту от фактического преобразования поля. Писать несложно, с loda или без sh. Вот одна из версий:
const deepMap = (fn) => (obj) =>
Array .isArray (obj)
? obj .map (deepMap (fn))
: Object (obj) === obj
? Object .fromEntries (Object .entries (obj) .map (([k, v]) => [k, deepMap (fn) (v)]))
: // else
fn (obj)
const trimText = field => typeof field === 'string' ? field .trim () : field;
const obj = {field: {subfield: {innerObj: { a: ' asdasd asdas . ' }, innerArr: [' s ', ' ssad . '], innerArrObj: [ { b: ' adsad ' } ]}}}
console .log (
deepMap (trimText) (obj)
)
Обратите внимание, что я упростил trimText
, поскольку trim
встроен в String.prototype
.
Написание этой универсальной c версии не намного сложнее, чем разовая версия, и вы можете использовать ее для других целей.
deepMap (square) ({a: 1, b: [2, 3, 4], c: [{d: 5}, {d: 6}]})
//=> {a: 1, b: [4, 9, 16], c: [{d: 25}, {d: 36}]}