[面试] 手写题-对象数组根据某个字段进行分组
题目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数组操作——对象数组根据某个相同的字段分组