📅  最后修改于: 2023-12-03 15:15:26.705000             🧑  作者: Mango
Groupby is an important function in many programming languages including JavaScript. In simple terms, groupby is a function that groups elements based on a given key. For instance, we may use groupby in JavaScript to group arrays of objects by their properties. In this article, we are going to explore how to use groupby in JavaScript by instance.
Before we delve into practical examples, let us first define the dataset that we are going to use. Suppose we have an array of objects representing books as follows:
let books = [
{ title: 'The Lord of the Rings', author: 'J.R.R. Tolkien', year: 1954 },
{ title: 'Animal Farm', author: 'George Orwell', year: 1945 },
{ title: '1984', author: 'George Orwell', year: 1949 },
{ title: 'To Kill a Mockingbird', author: 'Harper Lee', year: 1960 },
{ title: 'The Great Gatsby', author: 'F. Scott Fitzgerald', year: 1925 },
{ title: 'Pride and Prejudice', author: 'Jane Austen', year: 1813 }
];
Our goal is to group these books by their authors.
One way to do groupby in JavaScript is to use the reduce() method of the Array.prototype object. The reduce() method applies a function to each element of an array, resulting in a single output value. In our case, we will be using reduce() to group the books array by author.
const groupByAuthor = books.reduce((acc, book) => {
const key = book.author;
if (!acc[key]) {
acc[key] = [];
}
acc[key].push(book);
return acc;
}, {});
console.log(groupByAuthor);
This code will output:
{
"J.R.R. Tolkien": [
{ "title": "The Lord of the Rings", "author": "J.R.R. Tolkien", "year": 1954 }
],
"George Orwell": [
{ "title": "Animal Farm", "author": "George Orwell", "year": 1945 },
{ "title": "1984", "author": "George Orwell", "year": 1949 }
],
"Harper Lee": [
{ "title": "To Kill a Mockingbird", "author": "Harper Lee", "year": 1960 }
],
"F. Scott Fitzgerald": [
{ "title": "The Great Gatsby", "author": "F. Scott Fitzgerald", "year": 1925 }
],
"Jane Austen": [
{ "title": "Pride and Prejudice", "author": "Jane Austen", "year": 1813 }
]
}
The reduce() method iterates through each element in the books array. It checks whether the key (author) already exists in the accumulator object (acc). If it does not exist, it creates a new empty array for that key. If it does exist, it simply pushes the current element (book) to the corresponding array. Finally, it returns the accumulator object which contains the grouped books.
Another way to do groupby in JavaScript is by using a forEach loop. This approach follows a similar logic as the reduce() method, but it avoids using an accumulator object:
const groupByAuthor = {};
books.forEach((book) => {
const key = book.author;
if (!groupByAuthor[key]) {
groupByAuthor[key] = [];
}
groupByAuthor[key].push(book);
});
console.log(groupByAuthor);
This code will output the same result as the previous example.
Groupby is a powerful function that simplifies the manipulation of arrays in JavaScript. In this article, we have learned how to use groupby in JavaScript by instance using two different approaches. We hope this article has been helpful to you.