如何按JSON对象的number和item字段分组数组元素?
按
number和item字段分组数组元素 你可以用Array.prototype.reduce()来实现这个分组需求,这比单独用sort()或filter()更高效直接,具体实现如下:
const originalArray = [ {number: 9, item: 'Item 1', descripton: 'abc'}, {number: 5, item: 'Item 2', descripton: 'def'}, {number: 9, item: 'Item 2', descripton: 'ghi'}, {number: 9, item: 'Item 1', descripton: 'xyz'}, ]; // 用reduce构建分组映射对象 const groupedMap = originalArray.reduce((acc, current) => { // 生成唯一分组标识:拼接number和item的值 const groupKey = `${current.number}-${current.item}`; // 若当前分组不存在,初始化空数组 if (!acc[groupKey]) { acc[groupKey] = []; } // 将当前元素推入对应分组 acc[groupKey].push(current); return acc; }, {}); // 提取分组对象的所有值,得到目标二维数组 const groupedArray = Object.values(groupedMap); console.log(groupedArray);
代码说明
reduce遍历构建分组:遍历原数组时,以number和item拼接成的字符串作为唯一键,把相同键的元素归集到同一个数组中。- 转换为目标结构:通过
Object.values()将分组对象的数组值提取出来,直接得到你需要的二维数组结构。
这个方法会保留分组在原数组中首次出现的顺序,在ES6及以上环境中可以直接使用。
内容的提问来源于stack exchange,提问作者Михаил Обломович
相关产品推荐
相关产品推荐

