Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.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_Ecmascript 6_Grouping_Object Literal - Fatal编程技术网

使用JavaScript连接数组中的连续(相关)对象

使用JavaScript连接数组中的连续(相关)对象,javascript,arrays,ecmascript-6,grouping,object-literal,Javascript,Arrays,Ecmascript 6,Grouping,Object Literal,给定以下数组: const activities = [ { type: 'car', duration: 60 }, { type: 'car', duration: 140 }, { type: 'ferry', duration: 60 }, { type: 'car', duration: 100 } ]; 合并的最佳方法是什么 类型为“car”且保留元素顺序的连续对象?在本例中,预期结果为: const activities = [ { type: 'car',

给定以下数组:

const activities = [
  { type: 'car', duration: 60 },
  { type: 'car', duration: 140 },
  { type: 'ferry', duration: 60 },
  { type: 'car', duration: 100 }
];
合并的最佳方法是什么 类型为“car”且保留元素顺序的连续对象?在本例中,预期结果为:

const activities = [
  { type: 'car', duration: 200 }, // merged
  { type: 'ferry', duration: 60 },
  { type: 'car', duration: 100 } // this stays
];
阵列是动态构建的,为了清晰起见,对示例进行了简化

经过多次尝试后,我成功地编写了工作代码,使用了
do/while
findIndex()
slice()
reduce()
组合来填充新数组。不过,代码感觉很麻烦,而且涉及很多操作

我想知道是否有一个简单的方法(我没有看到)来解决这个问题。。。欢迎提出任何建议

用于迭代对象。如果累加器中的最后一个项目的类型与当前项目的类型相同(
o
),请将持续时间添加到最后一个项目。如果没有,则将当前对象添加到累加器

const活动=[
{类型:'car',持续时间:60},
{类型:'car',持续时间:140},
{类型:'ferry',持续时间:60},
{类型:'car',持续时间:100}
];
常量结果=活动。减少((r,o)=>{
const last=r[r.长度-1];
如果(last&&last.type==o.type)last.duration+=o.duration;
else r.push({…o});
返回r;
}, []);
控制台日志(结果)用于迭代对象。如果累加器中的最后一个项目的类型与当前项目的类型相同(
o
),请将持续时间添加到最后一个项目。如果没有,则将当前对象添加到累加器

const活动=[
{类型:'car',持续时间:60},
{类型:'car',持续时间:140},
{类型:'ferry',持续时间:60},
{类型:'car',持续时间:100}
];
常量结果=活动。减少((r,o)=>{
const last=r[r.长度-1];
如果(last&&last.type==o.type)last.duration+=o.duration;
else r.push({…o});
返回r;
}, []);

控制台日志(结果)我相信其中一位大师会进一步完善这一点。但这里的诀窍是使用集合进行整理。 注意:如果要求和这些值,只需删除我的array init并使用+=

const活动=[
{类型:'car',持续时间:60},
{类型:'car',持续时间:140},
{类型:'ferry',持续时间:60},
{类型:'car',持续时间:100}
];
var newSet=newSet();
activities.forEach(activity=>{
if(newSet.has(activity.type)==false){
newSet.add(activity.type);
新闻集[活动.类型]=[];
}
新闻集[activity.type].push(activity.duration);
});

控制台日志(新闻集)我相信其中一位大师会进一步完善这一点。但这里的诀窍是使用集合进行整理。 注意:如果要求和这些值,只需删除我的array init并使用+=

const活动=[
{类型:'car',持续时间:60},
{类型:'car',持续时间:140},
{类型:'ferry',持续时间:60},
{类型:'car',持续时间:100}
];
var newSet=newSet();
activities.forEach(activity=>{
if(newSet.has(activity.type)==false){
newSet.add(activity.type);
新闻集[活动.类型]=[];
}
新闻集[activity.type].push(activity.duration);
});

控制台日志(新闻集)请添加代码…这不是上述问题的重复。它更复杂,因为只有连续的对象应该合并…请添加代码…这不是上述问题的重复。它更复杂,因为只有连续的对象应该合并。。。