本站资源收集于互联网,不提供软件存储服务,每天免费更新优质的软件以及学习资源!

如何使用reduce函数合并数组中连续相同项_并生成包含合并后的连续项的新数组?

网络教程 app 1℃

如何使用reduce函数合并数组中连续相同项_并生成包含合并后的连续项的新数组

合并相同连续项

如何从给定的数组中提取并合并连续的相同项,得到包含合并后的连续项的新数组?下文提供了一种实现该算法的方案。

算法步骤:

    创建一个对象 obj,用于存储合并的连续项。

    使用 reduce 迭代输入数组,执行以下操作:

    遍历每个元素 item 中的 content,并为每个 content 元素执行以下操作:

    获取当前元素的索引 index 和后续元素 next。如果后续元素存在,且其 start 值等于当前元素的 end 值,则继续迭代并从后续元素的 content 中删除当前元素。根据当前元素的 start 和 end 值计算键 key。如果 obj 中不存在 key,则将当前元素添加到 obj 中,并创建包含一个 content 元素的新对象。如果 key 已存在,则将当前元素的 content 添加到现有对象的 content 中。将 obj 中的值转换为一个包含合并后连续项的新数组 list。

示例代码:

let arr = [ { "start": 1, "end": 2, "content": [ "a", "b", "e" ] }, { "start": 2, "end": 3, "content": [ "b", "c" ] }, { "start": 3, "end": 4, "content": [ "b", "d" ] }, { "start": 4, "end": 5, "content": [ "d" ] }, { "start": 7, "end": 8, "content": [ "b" ] }, { "start": 9, "end": 11, "content": [ "b", "c" ] }];let obj = {};let list = arr.reduce((list, item, index, arr) => { item.content.foreach(citem => { let i = index; let next, cindex; while ((next = arr[i + 1]) && arr[i].end === next.start && (cindex = next.content.indexof(citem)) >= 0) {i++;next.content.splice(cindex, 1); } let end = arr[i].end; let key = item.start + ‘-‘ + end; if(!obj[key]){list.push(obj[key] = { start: item.start, end, content: [citem]}); }else{obj[key].content.push(citem); } }); return list;}, []);console.log(list);

输出:

[ { "start": 1, "end": 2, "content": [ "A", "E" ] }, { "start": 1, "end": 4, "content": [ "B" ] }, { "start": 2, "end": 3, "content": [ "C" ] }, { "start": 3, "end": 5, "content": [ "D" ] }, { "start": 7, "end": 8, "content": [ "B" ] }, { "start": 9, "end": 11, "content": [ "B", "C" ] }]

以上就是如何使用 reduce 函数合并数组中连续相同项,并生成包含合并后的连续项的新数组?的详细内容,更多请关注范的资源库其它相关文章!

转载请注明:范的资源库 » 如何使用reduce函数合并数组中连续相同项_并生成包含合并后的连续项的新数组?

喜欢 (0)