📅  最后修改于: 2023-12-03 15:20:50.433000             🧑  作者: Mango
Underscore.js是一个优秀的JavaScript工具库,为JavaScript提供了一系列常用的函数和工具。其中,_.sortBy是一个非常常用的函数,可以对集合中的元素按照指定的规则排序,并返回排序后的集合。
_.sortBy(list, iteratee, [context])
var arr = [3, 8, 1, 0, 9, 5];
_.sortBy(arr, function(num) {
return Math.sin(num);
});
// 返回 [8, 3, 5, 9, 1, 0]
在这个示例中,我们创建了一个数字数组,然后通过_.sortBy函数排序。我们使用了Math.sin函数作为迭代器,因此数组按sine值的顺序进行了排序。
.sortBy函数的iteratee参数指定了在排序中要使用的函数。这个函数返回转换后的基于元素的值。如果没有指定iteratee函数,.identity函数将被使用,该函数返回其参数。
下面是一个根据元素名称属性对集合进行排序的的例子:
var characters = [
{ name: "harry", house: "gryffindor" },
{ name: "ron", house: "gryffindor" },
{ name: "cho", house: "ravenclaw" },
{ name: "cedric", house: "hufflepuff" }
];
_.sortBy(characters, function(character) {
return character.name;
});
// 返回 [{ name: "cedric", house: "hufflepuff" }, { name: "cho", house: "ravenclaw" }, { name: "harry", house: "gryffindor" }, { name: "ron", house: "gryffindor" }]
在这个示例中,我们传递了一个函数,该函数返回一个包含每个角色的名称的字符串,_.sortBy根据名称对我们的数组进行了排序。
第三个参数,上下文参数,指定了函数内部的this关键字。如果没有指定上下文参数,函数将使用全局对象(通常是window)作为上下文。
使用上下文参数时,请记住this仅在被使用的函数中才会被引用。如果您定义的iteratee函数中引用了this,则需要传递上下文参数,Without上下文参数将导致该函数中的this无效。
以下是带有上下文参数的示例:
var context = {
multiplier: 5
};
var numbers = [1, 2, 3, 4, 5];
_.sortBy(numbers, function(num) {
return num * this.multiplier;
}, context);
// 返回 [1, 2, 3, 4, 5]
Underscore.js 的 _.sortBy 函数是一个非常有用的函数,用于排序集合中的数据。你可以指定一个序列化函数来定制排序规则,并且还可以使用上下文参数制定函数中的this对象。这个函数的强大之处在于它非常容易使用,即使是初学者也能快速理解其工作原理。