提问者:小点点

如果数组的长度大于1,JSON将对象分离为新对象


编辑:答案不工作,如果有更多的对象在JSON:/如果您可以再看一次,我将非常感激。

我正在尝试分离JSON数组来使用单个数组创建新对象。

null

const objs = [{
  id: ["18772729849", "17773133341", "17773173696"],
  o: 552750,
  g: 2,
  p: 5427.37,
  f: ["0.07480893", "0.07703563", "0.07160716"],
  b: ["76561198311594977", "76561198311424548", "76561198312084911"],
  d: ["uYEY1BQ", "jSdgIK5", "lldBCJt"],
},
{
  id: ["5122519", "7125125", "124124"],
  o: 12440,
  g: 412,
  p: 4124,
  f: ["0.033", "0.0123", "0.412412"],
  b: ["76561198124421421", "712412441248", "71241244911"],
  d: ["uYasdasd1BQ", "jSasdasdK5", "llfasCJt"],
}
];

null

我的输出应该如下所示:

null

[{
  id: ['18772729849'],
  o: 552750,
  g: 2,
  p: 5427.37,
  f: ['0.07480893'],
  b: ['76561198311594977'],
  d: ['uYEY1BQ']
},
{
  id: ['17773133341'],
  o: 552750,
  g: 2,
  p: 5427.37,
  f: ['0.07703563'],
  b: ['76561198311424548'],
  d: ['jSdgIK5']
},
{
  id: ['17773173696'],
  o: 552750,
  g: 2,
  p: 5427.37,
  f: ['0.07160716'],
  b: ['76561198312084911'],
  d: ['lldBCJt5']
},
{
  id: ['5122519'],
  o: 12440,
  g: 412,
  p: 4124,
  f: ['0.033'],
  b: ['76561198124421421'],
  d: ['uYasdasd1BQ']
},
{
  id: ['7125125'],
  o: 12440,
  g: 412,
  p: 4124,
  f: ['0.0123'],
  b: ['712412441248'],
  d: ['jSasdasdK5']
},

null

所以“o”,“g”,“p”和原来的对象一样。

解决方案:

null

const objs = [{ id: ["18772729849", "17773133341", "17773173696"], o: 552750, g: 2, p: 5427.37, f: ["0.07480893", "0.07703563", "0.07160716"], b: ["76561198311594977", "76561198311424548", "76561198312084911"], d: ["uYEY1BQ", "jSdgIK5", "lldBCJt"],},{ id: ["5122519", "7125125", "124124"], o: 12440, g: 412, p: 4124, f: ["0.033", "0.0123", "0.412412"], b: ["76561198124421421", "712412441248", "71241244911"], d: ["uYasdasd1BQ", "jSasdasdK5", "llfasCJt"]}];

var result = objs.flatMap(obj=>{
  return Array.from({length:obj.id.length},(_,i)=>Object.fromEntries(
  Object.entries(obj).map(([key, val])=>[key, Array.isArray(val) ? [val[i]] : val])
  ));
});

console.log(result);

null


共3个答案

匿名用户

您可以通过映射键值对来获取键值对的fromentries,并且可以根据id属性的长度使用array.from来生成新数组。 下面是我的尝试:

null

const objs = [{ id: ["18772729849", "17773133341", "17773173696"], o: 552750, g: 2, p: 5427.37, f: ["0.07480893", "0.07703563", "0.07160716"], b: ["76561198311594977", "76561198311424548", "76561198312084911"], d: ["uYEY1BQ", "jSdgIK5", "lldBCJt"],},{ id: ["5122519", "7125125", "124124"], o: 12440, g: 412, p: 4124, f: ["0.033", "0.0123", "0.412412"], b: ["76561198124421421", "712412441248", "71241244911"], d: ["uYasdasd1BQ", "jSasdasdK5", "llfasCJt"]}];

var result = objs.flatMap(obj=>{
  return Array.from({length:obj.id.length},(_,i)=>Object.fromEntries(
  Object.entries(obj).map(([key, val])=>[key, Array.isArray(val) ? [val[i]] : val])
  ));
});

console.log(result);

匿名用户

实际上,只需使用.map()

null

let data = {
  id: [ '18772729849', '17773133341', '17773173696' ],
  o: 552750,
  g: 2,
  p: 5427.37,
  f: [ '0.07480893', '0.07703563', '0.07160716' ],
  b: [ '76561198311594977', '76561198311424548', '76561198312084911' ],
  d: [ 'uYEY1BQ', 'jSdgIK5', 'lldBCJt' ]
}

let result = data.id.map((el,i) => {
   return {
      id: [el],
      o: data.o,
      g: data.g,
      p: data.p,
      f: [data.f[i]],
      b: [data.b[i]],
      d: [data.d[i]]
   }
})

console.log(result);

匿名用户

使用object.entriesmap

null

const objs = [{
  id: ["18772729849", "17773133341", "17773173696"],
  o: 552750,
  g: 2,
  p: 5427.37,
  f: ["0.07480893", "0.07703563", "0.07160716"],
  b: ["76561198311594977", "76561198311424548", "76561198312084911"],
  d: ["uYEY1BQ", "jSdgIK5", "lldBCJt"],
}];

const res = objs.map(obj => Object.fromEntries(
  Object.entries(obj).map(([key, val]) => (Array.isArray(val) ? [key, [val[0]]] : [key, val]))
));

console.log(res);