Underscore.js是一个JavaScript实用工具库,它提供了许多实用的函数来帮助我们更加高效地编写JavaScript代码。其中一项非常有用的函数是_.groupBy
函数,它可以帮助我们根据指定的条件将数组元素进行分组。
_.groupBy
函数的基本用法
_.groupBy
函数的基本语法如下:
_.groupBy(list, iteratee, context)
其中的参数说明如下:
list
:要进行分组的数组或对象。iteratee
:用于确定元素所属组别的回调函数,可以是一个函数或对象。context
:可选参数,指定iteratee
函数中的this
的指向。
_.groupBy
函数会根据iteratee
回调函数的返回值对list
进行分组,返回一个以分组条件为键、分组元素为值的对象。其中的键就是iteratee
回调函数的返回值,而对应的值则是返回值相同的元素组成的数组。
下面是一个使用_.groupBy
函数对一个数组进行分组的示例:
const arr = [1, 2, 3, 4, 5, 6];
const grouped = _.groupBy(arr, (num) => num % 2 === 0 ? 'even' : 'odd');
console.log(grouped);
上面的代码会将数组中的奇数和偶数分别分到一个组里,grouped
的值为:
{
odd: [1, 3, 5],
even: [2, 4, 6]
}
可以看到,groupBy
函数根据回调函数的返回值将数组元素分成了两个组。
_.groupBy
函数的高级用法
除了基本用法之外,_.groupBy
函数还支持一些高级用法,下面我们来看两个例子。
示例一:根据属性值进行分组
有时候我们需要根据对象的属性值来对对象进行分组,可以使用_.property
函数来创建一个回调函数来实现。下面的示例演示了如何根据学生的年级将学生数组进行分组:
const students = [
{ name: 'Alice', grade: 'A' },
{ name: 'Bob', grade: 'B' },
{ name: 'Charlie', grade: 'B' },
{ name: 'David', grade: 'C' }
];
const grouped = _.groupBy(students, _.property('grade'));
console.log(grouped);
上面的代码将会输出以下结果:
{
"A": [ { name: 'Alice', grade: 'A' } ],
"B": [ { name: 'Bob', grade: 'B' }, { name: 'Charlie', grade: 'B' } ],
"C": [ { name: 'David', grade: 'C' } ]
}
示例二:根据多个条件分组
如果我们需要根据多个条件对数组进行分组,可以使用一个复合函数作为回调函数来实现。下面的示例演示了如何根据学生的年级和班级将学生数组进行分组:
const students = [
{ name: 'Alice', grade: 'A', class: 1 },
{ name: 'Bob', grade: 'B', class: 2 },
{ name: 'Charlie', grade: 'B', class: 1 },
{ name: 'David', grade: 'C', class: 2 },
{ name: 'Eva', grade: 'A', class: 2 }
];
const grouped = _.groupBy(students, (student) => {
return [student.grade, student.class].join('-');
});
console.log(grouped);
上面的代码将会输出以下结果:
{
"A-1": [ { name: 'Alice', grade: 'A', class: 1 } ],
"B-2": [ { name: 'Bob', grade: 'B', class: 2 } ],
"B-1": [ { name: 'Charlie', grade: 'B', class: 1 } ],
"C-2": [ { name: 'David', grade: 'C', class: 2 } ],
"A-2": [ { name: 'Eva', grade: 'A', class: 2 } ]
}
上面的代码将学生对象按照年级和班级组成一个键,对应的值是符合条件的学生对象组成的数组。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Underscore.js _.groupBy函数 - Python技术站