Javascript 在对象数组中对动态键进行分组
我有一个我正试图转换的对象Javascript 在对象数组中对动态键进行分组,javascript,arrays,object,grouping,Javascript,Arrays,Object,Grouping,我有一个我正试图转换的对象 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
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(链接)对其进行分组,例如-
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;
}
}
然后,要获取数组,可以使用对象。条目
:
const result = Object.entries(hash).map(([key, value]) => ({ key, value }));
这并不完全是您想要的,但老实说,我看不出有一个每个对象只有一个键的对象数组的意义。我首先使用哈希表进行分组:
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;
}
}
然后,要获取数组,可以使用对象。条目
:
const result = Object.entries(hash).map(([key, value]) => ({ key, value }));
这并不完全是您想要的,但老实说,我看不出一组对象每个都只有一个键的感觉。嘿,非常感谢Jonas。此外,我观察到,我有一些记录的值类似于“A”:{“XY1”:[1,5]}。我想把它添加到散列中,作为1:“A”和5:“A”。我已经做了这个编辑-如果(!(数组的值实例))哈希表[line][value]=station;else{value.map(item=>{hashTable[line][item]=station;})你认为有更干净的方法吗?是的,如果你不需要返回值,就不需要
.map
。。。做了一篇编辑嘿,非常感谢乔纳斯。此外,我观察到,我有一些记录的值类似于“A”:{“XY1”:[1,5]}。我想把它添加到散列中,作为1:“A”和5:“A”。我已经做了这个编辑-如果(!(数组的值实例))哈希表[line][value]=station;else{value.map(item=>{hashTable[line][item]=station;})你认为有更干净的方法吗?是的,如果你不需要返回值,就不需要.map
。。。编辑