通过两个属性对数组中的值进行分组 JavaScript
javascriptweb developmentobject oriented programming更新于 2025/10/10 3:24:17
我们有一个像这样的对象数组 −
const arr = [
{ value: 12, gap: 1 },
{ value: 13, gap: 1 },
{ value: 14, gap: 1 },
{ value: 15, gap: 1 },
{ value: 19, gap: 2 },
{ value: 21, gap: 1 },
{ value: 22, gap: 1 },
{ value: 23, gap: 1 },
{ value: 27, gap: 1 },
{ value: 31, gap: 4 },
{ value: 35, gap: 4 },
{ value: 39, gap: 4 },
{ value: 43, gap: 1 },
{ value: 50, gap: 1 },
{ value: 51, gap: 1 },
{ value: 52, gap: 1 },
{ value: 55, gap: 1 },
{ value: 57, gap: 1 },
];
我们需要编写一个函数,该函数接受此数组并返回一个新数组,其中所有连续对象(其值等于前一个对象的值与间隙之和)必须组合在一个子数组中。
例如 − 值为 12 的对象间隙为 1,其下一个对象的值是 13,因此必须将它们分组,并将值为 14 和 15 的对象与它们分组,依此类推。
现在,理解了问题,让我们继续编写此问题的代码。我们将使用 Array.prototype.reduce() 方法来构造所需的数组 −
示例
const arr = [
{ value: 12, gap: 1 },
{ value: 13, gap: 1 },
{ value: 14, gap: 1 },
{ value: 15, gap: 1 },
{ value: 19, gap: 2 },
{ value: 21, gap: 1 },
{ value: 22, gap: 1 },
{ value: 23, gap: 1 },
{ value: 27, gap: 1 },
{ value: 31, gap: 4 },
{ value: 35, gap: 4 },
{ value: 39, gap: 4 },
{ value: 43, gap: 1 },
{ value: 50, gap: 1 },
{ value: 51, gap: 1 },
{ value: 52, gap: 1 },
{ value: 55, gap: 1 },
{ value: 57, gap: 1 },
];
const groupArray = arr => {
return arr.reduce((acc, val, ind, array) => {
// 累计数据和累计数据的 lastIndex
const { data, currentIndex } = acc;
// 当前对象属性
const { value, gap } = val;
// 前一个对象属性
const v = arr[ind-1]?.value;
const g = arr[ind-1]?.gap;
if(ind === 0 || value !== v + g){
// 记录最后一个对象的索引并推送新的子数组
const index = data.push([val]) - 1;
return { data, currentIndex: index };
};
data[currentIndex].push(val);
return { data, currentIndex };
}, {
data: [],
currentIndex: 0
}).data;
}
console.log(groupArray(arr));
输出
控制台中的输出将是 −
[
[
{ value: 12, gap: 1 },
{ value: 13, gap: 1 },
{ value: 14, gap: 1 },
{ value: 15, gap: 1 }
],
[
{ value: 19, gap: 2 },
{ value: 21, gap: 1 },
{ value: 22, gap: 1 },
{ value: 23, gap: 1 }
],
[ { value: 27, gap: 1 } ],
[
{ value: 31, gap: 4 },
{ value: 35, gap: 4 },
{ value: 39, gap: 4 },
{ value: 43, gap: 1 }
],
[
{ value: 50, gap: 1 },
{ value: 51, gap: 1 },
{ value: 52, gap: 1 }
],
[ { value: 55, gap: 1 } ],
[ { value: 57, gap: 1 } ]
]
相关文章
有用资源
javascript 参考教程 - 该教程包含有关 javascript 的更多信息:https://www.cainiaomax.com/javascript/

