递归地从对象JavaScript中剥离特定属性

时间:2017-10-22 08:32:52

标签: javascript object recursion

我目前正在尝试编写一个检查对象属性的函数,如果该属性有一个键'数据',则将该值应用于其父元素,除非当前元素已经在对象根。所以,给定对象:

{
        data: {
          user: {
            data: {
              firstName: 'joe',
              data: {surname: 'bloggs'}
            }
          },
          message: 'this is a message'
        }
      }

它应该返回:

{
        data: {
          user: {
            firstName: 'joe',
            surname: 'bloggs'
          },
          message: 'this is a message'
        }
      }

到目前为止,我的逻辑看起来像这样:

function stripData(data, parent) {
    'use strict';

    return Object.assign({}, ...Object.keys(data).map(key => {
      if(key !== 'data' && typeof data[key] === 'object' && !parent){
        return ({[key]: exports.stripData(data[key], key)});
      }
      if(key === 'data' && parent){
        Logger.verbose(`key is data and parent is set`);
        if(typeof data[key] === 'object'){
          return ({[parent]: exports.stripData(data[key], parent)});;
        }
        return ({[parent]: data[key]});
      }
      if(key === 'data'&&!parent ){
        return ({[key]: exports.stripData(data[key], key)});
      }
      return ({[key]: data[key]})
    }));
}

此函数到目前为止只返回传递的对象。日志语句告诉我它到达第一个对象的message键,但到那时它还没有递归遍历对象树。

可能有一种更简单的方法可以做到这一点,如果可能的话,我希望保持无依赖关系,尽管如果有人能指出我用lodash这样做的直接方式,我会使用它。

1 个答案:

答案 0 :(得分:0)

这个似乎给出了结果,你需要:



onCreate()