使用JavaScript的reduce()和Object.values()函数
示例代码:
const data = [ {name: 'John', age: 23, city: 'New York'}, {name: 'Alex', age: 23, city: 'Chicago'}, {name: 'Mark', age: 25, city: 'New York'}, {name: 'Joe', age: 25, city: 'Chicago'}, {name: 'David', age: 23, city: 'New York'} ];
const groupBy = (array, ...keys) => { return Object.values(array.reduce((accumulator, currentValue) => { const groupByKey = JSON.stringify(keys.map(key => currentValue[key])); if (!accumulator[groupByKey]) { accumulator[groupByKey] = {key: keys.map(key => currentValue[key])}; } accumulator[groupByKey].values = accumulator[groupByKey].values || []; accumulator[groupByKey].values.push(currentValue); return accumulator; }, {})); };
const result = groupBy(data, 'age', 'city'); console.log(result);
//Output: //[ // { // "key": [ // 23, // "New York" // ], // "values": [ // { // "name": "John", // "age": 23, // "city": "New York" // }, // { // "name": "David", // "age": 23, // "city": "New York" // } // ] // }, // { // "key": [ // 23, // "Chicago" // ], // "values": [ // { // "name": "Alex", // "age": 23, // "city": "Chicago" // } // ] // }, // { // "key": [ // 25, // "New York" // ], // "values": [ // { // "name": "Mark", // "age": 25, // "city": "New York" // } // ] // }, // { // "key": [ // 25, // "Chicago" // ], // "values": [ // { // "name": "Joe", // "age": 25, // "city": "Chicago" // } // ] // } //]