如何在JavaScript中将存储员工信息的关联数组按每3个元素分块?
嘿,我懂你的困扰了!你手里的arr其实是个JavaScript对象(也就是你说的关联数组),不是普通的数组,所以直接用常规的数组分块方法肯定得不到预期结果——毕竟对象没有slice或者数组的迭代方法呀。别慌,我们一步步来解决这个问题:
步骤1:把对象转换成可分块的数组结构
首先,我们需要把对象的键值对提取出来,变成一个二维数组,每个元素是[员工ID, 员工信息]的形式。用Object.entries()就能轻松做到:
// 把对象转成键值对数组 const employeeEntries = Object.entries(arr);
这个employeeEntries就是标准数组了,接下来就能用数组分块逻辑处理。
步骤2:编写通用的数组分块函数
我们写一个简单的分块函数,接收数组和每块的大小,返回分好的块:
function chunkEmployees(arr, chunkSize) { const result = []; // 按chunkSize的步长遍历数组 for (let i = 0; i < arr.length; i += chunkSize) { // 截取从当前索引到i+chunkSize的片段,加入结果 result.push(arr.slice(i, i + chunkSize)); } return result; }
步骤3:执行分块,按需转回对象
现在调用这个函数,把我们的员工键值对数组分成每3个一组:
// 每3个员工分一块 const chunkedEntries = chunkEmployees(employeeEntries, 3);
如果你希望每个块还是保持对象(关联数组)的形式,而不是数组,只需要用Object.fromEntries()把每个块再转回对象:
// 把每个分块的键值对数组转回对象 const chunkedObjects = chunkedEntries.map(chunk => Object.fromEntries(chunk));
最终效果示例
比如chunkedObjects的第一个元素就是:
{ "00B065011K": { "salary": "35900", "date": "2020-12-01" }, "00B101794N": { "salary": "8308", "date": "2020-12-01" }, "00C100365N": { "salary": "28400", "date": "2020-12-01" } }
剩下的块也会按每3个员工一组的规则生成,最后一组如果不足3个(比如你这里总共有9个,刚好3组),也会正常保留。
为什么之前的方法没用?
因为你一开始可能直接用了针对普通数组的分块逻辑,但你的原始数据是对象——对象的结构和数组完全不同,不能直接用数组的方法处理。先转成键值对数组,是解决这个问题的关键哦!
内容的提问来源于stack exchange,提问作者Rakibul Islam
相关产品推荐
相关产品推荐

