[面试] 手写题-对象数组根据某个字段进行分组

发布于:2025-07-16 ⋅ 阅读:(24) ⋅ 点赞:(0)

题目1

// 输入
let arr = [
    {name: '张三', age: 18},
    {name: '李四', age: 20},
    {name: '王五', age: 18},
    {name: '赵六', age: 20},
    {name: '孙七', age: 21},
];

// 输出
{
  18: [{name: '张三', age: 18}, {name: '王五', age: 18}],
  20: [{name: '李四', age: 20}, {name: '赵六', age: 20}],
  21: [{name: '孙七', age: 21}],
}

代码

function groupBy(arr) {
	let obj = {};
	arr.forEach(item => {
	    if (!obj[item.age]) {
	        obj[item.age] = [];
	    }
	    obj[item.age].push(item);
	});
	return obj;
}

改成指定字段

function groupBy(arr,key) {
	let obj = {};
	arr.forEach(item => {
	    if (!obj[item[key]]) {
	        obj[item[key]] = [];
	    }
	    obj[item[key]].push(item);
	});
	return obj;
}

groupBy(arr,'age')

题目2

// 输入
let arr = [
    {name: '张三', age: 18},
    {name: '李四', age: 20},
    {name: '王五', age: 18},
    {name: '赵六', age: 20},
    {name: '孙七', age: 21},
];

// 输出
[
  {
    key: "18",
    data: [{name: '张三', age: 18}, {name: '王五', age: 18}]
  },
  {
    key: "20",
    data: [{name: '李四', age: 20}, {name: '赵六', age: 20}]
  },
  {
    key: "21",
    data: [{name: '孙七', age: 21}]
  }
]

代码

function groupBy(arr) {
	let obj = {};
	arr.forEach(item => {
	    if (!obj[item.age]) {
	        obj[item.age] = [];
	    }
	    obj[item.age].push(item);
	});
	
	let resArr = []
	Object.keys(obj).forEach(key=> {
		resArr.push({
			age: key,
			data: obj[key],
		})
	})
	return resArr
}


参考:

【JS】js数组分组,javascript实现数组的按属性分组

js数组操作——对象数组根据某个相同的字段分组


网站公告

今日签到

点亮在社区的每一天
去签到