我正在尝试学习数组排序。这似乎很简单。但是在 mozilla 网站上,我遇到了一个讨论排序地图的部分(大约在页面下方的四分之三处)。
数组中的每个元素可以多次调用 compareFunction。根据 compareFunction 的性质,这可能会产生很高的开销。compareFunction 所做的工作越多,要排序的元素越多,考虑使用映射进行排序可能就越明智。
给出的例子是这样的:
// the array to be sorted
var list = ["Delta", "alpha", "CHARLIE", "bravo"];
// temporary holder of position and sort-value
var map = [];
// container for the resulting order
var result = [];
// walk original array to map values and positions
for (var i=0, length = list.length; i < length; i++) {
map.push({
// remember the index within the original array
index: i,
// evaluate the value to sort
value: list[i].toLowerCase()
});
}
// sorting the map containing the reduced values
map.sort(function(a, b) {
return a.value > b.value ? 1 : -1;
});
// copy values in right order
for (var i=0, length = map.length; i < length; i++) {
result.push(list[map[i].index]);
}
// print sorted list
print(result);
我不明白几件事。compareFunction
也就是说:“数组中的每个元素可以多次调用”是什么意思?有人可以给我看一个例子吗。其次,我了解示例中正在执行的操作,但我不了解compareFunction
. 此处显示的示例看起来非常简单,将数组映射到对象,对其值进行排序,然后将其放回数组中,乍一看我认为会花费更多开销。我知道这是一个简单的例子,可能除了展示程序之外没有其他用途。但是有人可以举一个例子,说明什么时候像这样映射会降低开销?这似乎还有很多工作。
谢谢!