javascript - 反向填充对象

标签 javascript arrays typescript javascript-objects

所以我正在尝试构建重建对象并以受人尊敬的方式返回的函数,例如:

当前对象:

{
    "child1": {
        "value": "firstvalue", "Key": "ID1"
    },
    "child2":
    {
        "value": "secondvalue", "Key": "ID2"
    },
    "child3":
    {
        "value": "thirdvalue", "Key": "ID1"
    },
}

预期对象:

{
    "ID1": {
        "child1": "first value",
        "child3": "third value", 
    },
    "ID2": {
        "child2": "third value",
    },
}

有什么干净的方法可以做到吗?或者我必须将它插入数组?我尝试将其插入数组,然后组织它,但每当我尝试插入具有相同“ID1”的对象时,它都会替换它,尝试使用reduce和concat到数组中,但仍然没有弄清楚,谢谢您的帮助!

最佳答案

是的,这很有可能:

const obj = {
    "child1": {
        "value": "firstvalue", "Key": "ID1"
    },
    "child2":
    {
        "value": "secondvalue", "Key": "ID2"
    },
    "child3":
    {
        "value": "thirdvalue", "Key": "ID1"
    },
};

const result = Object.entries(obj) // Get all key/value pairs in the source object.
  .reduce((result, [child, data]) => {
    result[data.Key] = result[data.Key] || {}; // Make sure result[data.Key] is an object.
    result[data.Key][child] = data.value;      // Assign the current entry's value to object.
    return result;
  }, {});
    
console.log(result)

关于javascript - 反向填充对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60545093/

相关文章:

asp.net-mvc - 更新 Bootstrap 后发生 "The build task could not find node.exe which is required to run the TypeScript compiler."

javascript - 如何在 JavaScript/TypeScript 中检测具有相同索引的嵌套循环

javascript - 显示每个元素的关闭按钮并使用 JavaScript 隐藏当前元素

javascript - 使用 jQuery 更改 iFrame 背景

javascript 在哪里放置 var 语句

ruby - 检查数组中是否包含多个项目的好方法

python - 检测多个 numpy 二维数组中的第一个唯一行

php - 基于共同的列值将两个数组组合成一个数组

javascript - 在 TypeScript 中,如何将属性添加到接口(interface)中的对象类型?

javascript - 需要从 PHP 代码创建 Ajax