首页 > 解决方案 > 递归修剪对象中所有元素的更好方法?

问题描述

如果我有一个像这样的对象,

const obj = {
    field: {
        subfield: {
            innerObj: { a: ' asdasd  asdas . ' },
            innerArr: ['  s  ', '  ssad . '],
            innerArrObj: [ { b: '   adsad  ' } ],
        }
    }
}

我想出了这样的东西,

const trimFields = (data) =>
  _.mapValues(data, (element, k) =>
    _.isArray(element)
      ? element.map((value) =>
          _.isObject(value) ? trimFields(value) : trimText(value)
        )
      : _.isObject(element)
      ? trimFields(element)
      : trimText(element)
  );

但我想知道是否有更好/更有效的方法来做到这一点?

JSFiddle

标签: javascriptobjectrecursionlodash

解决方案


我会直接在函数中切换数组/对象/其他,简化递归调用:

 const trimFields = (data) =>
    _.isArray(data) 
      ? data.map(trimFields)
      :  _.isObject(data) 
        ? _.mapValues(trimFields)
        : trimText(data);

推荐阅读