【问题标题】:Select and match the same property names/values from list of objects in a json object从 json 对象的对象列表中选择并匹配相同的属性名称/值
【发布时间】:2022-01-12 23:49:06
【问题描述】:

给定以下 json 对象

{
    "Item 1": {
        title: 'Item 1',
        sub: {
            left: {
                prop1: '1',
                prop2: '2',
                prop3: '3',
            },
            right: {
                prop1: '4',
                prop2: '5',
                prop3: '6',
            },
        },
    },
    "Item 2": {
        title: 'Item 2',
        sub: {
            left: {
                prop1: '7',
                prop2: '8',
                prop3: '9',
            },
            right: {
                prop1: '10',
                prop2: '11',
                prop3: '12',
            },
        },
    }
}

我正在尝试为列表中的每个单独对象匹配“左”和“右”中的所有值。可能有更多属性(例如 prop4),但给定对象的“左”和“右”将始终匹配。

在这个例子中,期望的结果是

[
  [
    [
      "1",
      "4"
    ],
    [
      "2",
      "5"
    ],
    [
      "3",
      "6"
    ]
  ],
  [
    [
      "7",
      "10"
    ],
    [
      "8",
      "11"
    ],
    [
      "9",
      "12"
    ]
  ]
]

我真的很讨厌我只是问这个而没有工作中的代码可以分享。我已经用 Object.Keys 循环了对象,然后设法使用 Reduce 按名称(“prop1”)选择了一个属性,但我无法选择所有内容。

感谢您的帮助和指点

【问题讨论】:

    标签: javascript arrays json object


    【解决方案1】:

    这是一个相当简单的解决方案,在顶级对象的 Object.values() 上调用 map(),然后使用实用程序 zip 函数(有关完整讨论,请参阅 this question)压缩 left 和 @ sub 属性的 987654328@ 值。

    const input = { 'Item 1': { title: 'Item 1', sub: { left: { prop1: '1', prop2: '2', prop3: '3', }, right: { prop1: '4', prop2: '5', prop3: '6', }, }, }, 'Item 2': { title: 'Item 2', sub: { left: { prop1: '7', prop2: '8', prop3: '9', }, right: { prop1: '10', prop2: '11', prop3: '12', }, }, }, };
    
    const zip = (...rows) => [...rows[0]].map((_, c) => rows.map((row) => row[c]));
    
    const result = Object.values(input).map(({ sub }) => 
      zip(Object.values(sub.left), Object.values(sub.right)));
    
    console.log(result);

    【讨论】:

      猜你喜欢
      • 2019-02-28
      • 1970-01-01
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-18
      相关资源
      最近更新 更多