javascript - 简化嵌套的 javascript 对象

标签 javascript arrays object nested-object

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

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" }
        }

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

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

}

最佳答案

您可以使用Object.keysreudce

这里的想法是

  • 首先从对象中取出 key 。
  • 对它们进行排序//对象没有顺序
  • 现在拆分 - 上的键并使用 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)

关于javascript - 简化嵌套的 javascript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55500610/

相关文章:

c++ - 多次读入数组

java - 如何在java中返回匿名实例化对象

javascript - ng-if 中的原始 javascript 不起作用?

javascript - SVG 到 PNG 不带宽度属性

javascript - .ejs 与 .html 相比?

javascript - jQuery 计算 - 如何根据发送到一个数量字段的总计触发多个折扣条件

javascript - 在 Javascript 中解构对象字段并计算总和

java - IOUtils.toByteArray() 的内存不足错误

javascript - 如何从 addEventListener() 调用中调用对象方法?

javascript - 如果输入为空或包含值则切换类 - Javascript