Javascript 从现有阵列创建新的对象阵列

Javascript 从现有阵列创建新的对象阵列,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,我有一个现有的数组,我想在JS中重新格式化。以下是现有数组,其中每个项都是一个对象: [ { end_time:"7.14", pk:45065, start_time:"4.51", text:"Lorem Ipsum" }, { end_time:"9.00", pk:45066, start_time:"7.14", text:"Lorem Ipsum Something" }, { end_time:"13.09", pk:450667

我有一个现有的数组,我想在JS中重新格式化。以下是现有数组,其中每个项都是一个对象:

[
 {
  end_time:"7.14",
  pk:45065,
  start_time:"4.51",
  text:"Lorem Ipsum"
 },
 {
  end_time:"9.00",
  pk:45066,
  start_time:"7.14",
  text:"Lorem Ipsum Something"
 },
 {
  end_time:"13.09",
  pk:450667 ,     
  start_time:"9.00",
  text:"Lorem Ipsum Something"
 }, 
 {
  end_time:"17.01",
  pk:45068,
  start_time:"13.09",
  text:"Lorem Ipsum"
 },
 {
  end_time:"25.10",
  pk:45069,
  start_time:"17.01",
  text:"Lorem Ipsum Something"
 },
 {
  end_time:"28.06",
  pk:450670 ,     
  start_time:"25.10",
  text:"Lorem Ipsum Something"
 },
]
我想创建一个新的对象数组,其中旧数组中的每三个对象将成为新数组中的一个对象,如下所示:

 [
  segment: {
    phrase: {
      end_time:"7.14",
      pk:45065,
      start_time:"4.51",
      text:"Lorem Ipsum"
    },
    phrase: {
      end_time:"9.00",
      pk:45066,
      start_time:"7.14",
      text:"Lorem Ipsum Something"
     },
     phrase: {
      end_time:"13.09",
      pk:450667 ,     
      start_time:"9.00",
      text:"Lorem Ipsum Something"
     }
  },
  segment {
    phrase: {
      end_time:"17.01",
      pk:45068,
      start_time:"13.09",
      text:"Lorem Ipsum"
    },
    phrase: {
      end_time:"25.10",
      pk:45069,
      start_time:"17.01",
      text:"Lorem Ipsum Something"
    },
    phrase: {
      end_time:"28.06",
      pk:450670 ,     
      start_time:"25.10",
      text:"Lorem Ipsum Something"
    },
  }
]

我最头疼的是如何每三个项目取出一个,然后推到地图或循环中的新分段对象。我不确定最有效的方法是什么。非常感谢您的帮助。

Reduce函数从新对象中的
json
数组中删除每个对象,其中
键是短语,其值是指定的对象。然后,只需将结果指定给新创建的对象作为段键的值

var json=[{end_time:“7.14”,pk:45065,start_time:“4.51”,text:“Lorem Ipsum”},{end_time:“9.00”,pk:45066,start_time:“7.14”,text:“Lorem Ipsum某物”},{end_time:“13.09”,pk:450667,start_time:“9.00”,text:“Lorem Ipsum某物”},{end(end(17.01,pk:45068,start)time:“13.09”,text:“Lorem Ipsum Ipsum某物”},pk 17.01,pk:“Lorem Ipsum Something”},{结束时间:“28.06”,主键:450670,开始时间:“25.10”,文本:“Lorem Ipsum Something”},
res=json.reduce(函数s,a){
obj={};
obj.phrase=a;
s、 推(obj);
返回s;
}, []);
var对象={};
object.segment=res;
var结果=[object];
console.log(结果);
  • 您想要的结果应该是object,因为数组没有字符串键
  • 对象应该具有唯一的键,因此建议的解决方案将数字后缀附加到“段”键和“短语”键
  • 守则:
  • var-arr=[
    {
    结束时间:“7.14”,
    主键:45065,
    开始时间:“4.51”,
    正文:“知识产权”
    },
    {
    结束时间:“9点”,
    主键:45066,
    开始时间:“7.14”,
    文字:“Lorem Ipsum某物”
    },
    {
    结束时间:“13.09”,
    主键:450667,
    开始时间:“9.00”,
    文字:“Lorem Ipsum某物”
    }, 
    {
    结束时间:“17.01”,
    主键:45068,
    开始时间:“13.09”,
    正文:“知识产权”
    },
    {
    结束时间:“25.10”,
    主键:45069,
    开始时间:“17.01”,
    文字:“Lorem Ipsum某物”
    },
    {
    结束时间:“28.06”,
    主键:450670,
    开始时间:“25.10”,
    文字:“Lorem Ipsum某物”
    },
    ];
    var obj={};
    arr.forEach(阵列传输关闭(obj));
    document.getElementById('output').innerHTML=JSON.stringify(obj,null,2);
    //功能
    函数阵列传输闭合(obj){
    var=0;
    var段=1;
    返回函数(elem){
    ++短语;
    如果(短语==1){
    obj['段+段]={
    [短语]:元素
    };
    
    }否则如果(短语在edge的情况下会发生什么,
    arr.length%3!==0
    phase,phase,phase…相同的键?您不能对许多对象属性使用相同的键,因此这将不起作用。您需要使pk成为唯一的键,因为无论它值多少,您都不会向我们显示任何JSON。JSON是一种文本格式,要求键用双引号括起来。您向我们展示的是一个对象数组。请您解释一下您的代码在做什么,以及它是如何解决问题的?