【问题标题】:simplifying a nested javascript object简化嵌套的 javascript 对象
【发布时间】:2019-08-25 07:18:39
【问题描述】:

我有一个看起来像这样的对象:

var someUglyObject = 
{
    "1-1" : {foo1: "foo1-1Value", bar1: "bar1-1value"},
    "1-2" : {foo2: "foo1-2Value", bar2: "bar1-2value"},
    "2-1" : {foo2: "foo2-1Value", bar2: "bar2-1value"},
    "2-2" : {foo2: "foo2-2Value", bar2: "bar2-2value"}
}

我需要简化上面的嵌套对象,并在经过一些处理(连接)后转换为更简单的对象,如下所示:

var myObj = { 
             "1": { propsTogether : "foo1-1Valuebar1-1valuefoo1-2Valuebar1-2value"},
             "2": { propsTogether : "foo2-1Valuebar2-1valuefoo2-2Valuebar2-2value" }
        }

我的计划是通过这样的键进行交互,但不确定如何根据键的第一个字符将道具组合在一起,即对于值为 '2-1' - 2 的键应该是新的键。

var myObj= {};
Object.keys(someUglyObject).forEach(function(key) {

}

【问题讨论】:

  • 第二个对象不是比第一个更丑吗(它们都不漂亮,但第二个完全不可读)

标签: javascript arrays object nested-object


【解决方案1】:

您可以使用Object.keysreudce

这里的想法是

  • 首先从对象中取出键。
  • 对它们进行排序 // 对象没有顺序
  • 现在拆分- 上的键,并使用first element 作为op 对象上的键。
  • 使用 object.values 并以所需的格式加入它们并将其放在相应的键上

var obj = {'1-1' : {foo1: "foo1-1Value", bar1: "bar1-1value"},'1-2' : {foo2: "foo1-2Value", bar2: "bar1-2value"},'2-1' : {foo2: "foo2-1Value", bar2: "bar2-1value"},'2-2' : {foo2: "foo2-2Value", bar2: "bar2-2value"}}


let op = Object.keys(obj).sort().reduce((op,inp)=>{
  let key = inp.split('-',1)[0]
  op[key] = op[key] || {props:''}
  op[key].props = op[key].props + Object.values(obj[inp]).join('')
  return op
},{})

console.log(op)

【讨论】:

  • 看起来很漂亮!谢谢你的解释!!
  • @AJSwift 总是乐于提供帮助 :)
  • 如何简单地提取像{1 : { {foo1: "foo1-1Value", bar1: "bar1-1value"}, {foo2: "foo1-2Value", bar2: "bar1-2value"}}, 2: { {..}, {..} }这样的嵌套对象?
  • @AJSwift 这不是一个有效的格式,你需要在 JSON 中有 key:value 对,1 : { {foo1: "foo1-1Value", 这不是。
猜你喜欢
  • 2020-06-21
  • 1970-01-01
  • 2012-12-25
  • 2023-04-08
  • 2019-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-02
相关资源
最近更新 更多