Javascript 如何基于公共值从数组生成json

Javascript 如何基于公共值从数组生成json,javascript,typescript,Javascript,Typescript,您好,我有一个小问题,我有如下数组: const arrays = { 1: [c, u, g], 2: [c, u], 3: [c, u ,f], 4: [c, g], 5: [m, c, g], 6: [u, m] } const object = { c: { u: { g: { ends: 1 }, f: { ends: 3 } end

您好,我有一个小问题,我有如下数组:

const arrays = {
    1: [c, u, g],
    2: [c, u],
    3: [c, u ,f],
    4: [c, g],
    5: [m, c, g],
    6: [u, m]
}
const object = {
  c: {
    u: {
      g: {
        ends: 1
      },
      f: {
        ends: 3
      }
      ends: 2
    },
    g: {
      m: {
        ends: 5
      }
      ends: 4
    }
  },
  u: {
    m: {
      ends: 6
    }
  }
}
每个数组中的值都是唯一的。 我想将其转换为如下对象:

const arrays = {
    1: [c, u, g],
    2: [c, u],
    3: [c, u ,f],
    4: [c, g],
    5: [m, c, g],
    6: [u, m]
}
const object = {
  c: {
    u: {
      g: {
        ends: 1
      },
      f: {
        ends: 3
      }
      ends: 2
    },
    g: {
      m: {
        ends: 5
      }
      ends: 4
    }
  },
  u: {
    m: {
      ends: 6
    }
  }
}

可能吗?如果是这样的话,你能给我一些提示、一段代码或任何其他类型的答案吗?我被困在这里了。

你可以循环浏览对象的条目。然后减少每个值数组,并在每次迭代中创建嵌套对象。
reduce
返回最终的嵌套对象。因此,在这里添加一个
ends
属性

如果不需要排序嵌套路径,可以跳过
排序

const输入={
1:[“c”、“u”、“g”],
2:[“c”,“u”],
3:[“c”、“u”、“f”],
4:[“c”,“g”],
5:[“m”、“c”、“g”],
6:[“u”,“m”]
}
常量输出={};
for(对象条目的常量[n,路径](输入)){
路径
.sort()
.reduce((acc,path)=>(acc[path]=acc[path]|{}),输出)
.ends=+n
}

console.log(output)
您是否考虑过先将数组转换为所需结构的对象,然后再将该对象转换为JSON?我考虑过,但问题是我需要将其正确排序,如示例所示。“c”显然必须是最常出现的值,然后在带有“c”的数组中,它必须在带有“c”的数组中寻找新的最常出现的值。为什么输出中缺少
[m,c,g]
?我不确定我是否理解您的输入和想要的输出背后的原因,例如您在
g
中有
m
,但是
m
c
之前。你可能需要循环2次,第一次按发生次数排序?@adiga我想它变成了
c.g.m
这也是让你非常困惑的地方。我可以用这个答案和一些调整使它工作。再次感谢!但是,如果有人有相同的问题,这并不能解决您仍然需要按其在所有数组中出现的次数对其进行排序的所有问题。@Xy77是否要根据每个字符串在整个对象中出现的次数对单个数组进行排序?