【问题标题】:Nested Object deeping [closed]嵌套对象深入[关闭]
【发布时间】:2020-09-11 07:59:30
【问题描述】:

我也有包含嵌套对象的数据。 例如分享低于演示值。

const input = {
  a: 'jack',
  b: {
    c: 'sparrow',
    d: 'hahaha'
  }
}

现在我希望所有嵌套值都在同一级别。像这样。

const input = {
  a: 'jack',
  c: 'sparrow',
  d: 'hahaha'
}

我试过了,但输出错误。

const getEntries = (o, prefix = '') => 
  Object.entries(o).flatMap(([k, v]) => 
    Object(v) === v  ? getEntries(v, `${prefix}${k}.`) : [ [`${prefix}${k}`, v] ]
  )

console.log(
  Object.fromEntries(getEntries(input))
)

output:-
{
a:"jack",
b.c:"sparrow",
b.d.e:"hahaha"
}

提前感谢。

【问题讨论】:

  • 什么不起作用?请添加您的代码。
  • @NinaScholz 添加了我的代码,请看。谢谢。

标签: javascript node.js object


【解决方案1】:

你可以把问题的目的分开,

  • 获取所有平面条目,
  • 返回一个条目对象。

getFlatEntries 用作网络对象的递归并返回键/值对的扁平数组。

getFlat 接受一个对象并从平面条目中返回所需的平面对象

const
    getFlatEntries = object => Object.entries(object).flatMap(([k, v]) => v && typeof v === 'object' ? getFlatEntries(v) : [[k, v]]),
    getFlat = object => Object.fromEntries(getFlatEntries(object))
    input = { a: 'jack', b: { c: 'sparrow', d: 'hahaha', e: { f: 'most inner' } } },
    flat = getFlat(input);

console.log(flat);

【讨论】:

    【解决方案2】:
    output = {}
    
    function unnest_obj(new_obj,obj){
      for (let x in obj) {
        if(typeof obj[x] === "object") unnest_obj(new_obj,obj[x])
        
        else new_obj[x] = obj[x]
      }
    }
    
    unnest_obj(output,input)
    //console.log(output)
    

    【讨论】:

      【解决方案3】:

      这应该可以工作

          const flattenObject = (ob) => {
          var toReturn = {};
          for (var i in ob) {
              if (!ob.hasOwnProperty(i)) continue;
              
              if ((typeof ob[i]) == 'object') {
                  var flatObject = flattenObject(ob[i]);
                  for (var x in flatObject) {
                      if (!flatObject.hasOwnProperty(x)) continue;
                      toReturn[x] = flatObject[x];
                  }
              } else {
                  toReturn[i] = ob[i];
              }
          }
          return toReturn
      }
      

      【讨论】:

        猜你喜欢
        • 2017-05-09
        • 2017-08-27
        • 2018-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多