Javascript 从现有阵列创建新的对象阵列
我有一个现有的数组,我想在JS中重新格式化。以下是现有数组,其中每个项都是一个对象: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
[
{
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是一种文本格式,要求键用双引号括起来。您向我们展示的是一个对象数组。请您解释一下您的代码在做什么,以及它是如何解决问题的?