Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在对象数组中对动态键进行分组_Javascript_Arrays_Object_Grouping - Fatal编程技术网

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
。。。编辑