gpt4 book ai didi

javascript - 在对象数组中对动态键进行分组

转载 作者:行者123 更新时间:2023-11-30 09:12:35 26 4
gpt4 key购买 nike

我有一个我正在尝试转换的对象

var data = {
"A": {"XY1" : 1},
"B": {"XY2": 12},
"C": {"XY3": 10},
"D": {"XY1": 2}

我正在尝试将其转换为

[
{ "XY1": { 1:"A", 2:"D"}},
{ "XY2": { 12:"B"}},
{ "XY3": { 8:"A", 10:"C"}},
]

(我们可以忽略 XY1,XY2 等的顺序)

这是我到目前为止所做的 -

  var result = Object.keys(data).flatMap(alphabet => {
return Object.keys(data[alphabet]).map(group => {
return Object.assign({}, {
[group]: { [data[alphabet][group]]: alphabet }
})
});
});

console.log(result);

打印

[
{"XY1":{"1":"A"}},
{"XY3":{"8":"A"}},
{"XY2":{"12":"B"}},
{"XY3":{"10":"C"}},
{"XY1":{"2":"D"}}
]

但是,我希望使用reduce(chaining)对其进行分组,例如-

var result = Object.keys(data).flatMap(alphabet => {
return Object.keys(data[alphabet]).map(group => {
return Object.assign({}, {
[group]: { [data[alphabet][group]]: alphabet }
})
});
}).reduce((obj, item) => {

});

这可能吗?我如何按这些动态键分组?

帮助非常感谢!

最佳答案

我首先使用哈希表进行分组:

  const hash = {};

for(const [key, obj] of Object.entries(data)) {
for(const [key2, values] of Object.entries(obj)) {
if(!hash[key2]) hash[key2] = {};

for(const value of [values].flat())
hash[key2][value] = key;
}
}

然后要获得一个数组,您可以使用 Object.entries:

  const result = Object.entries(hash).map(([key, value]) => ({ key, value }));

这不是您想要的,但老实说,我看不到每个对象只有一个键的数组的感觉。

关于javascript - 在对象数组中对动态键进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57458743/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com