sort()函数可以对数组进行排序,他默认是将数组中的元素调用toString()方法,所以得到的结果会是1,25,3
很显然这不是我们要的结果,所他传入了compare方法作为参数
function compare(a,b){
if(a>b){
return sha?
}
if(a=b){
return 0
}
if(a<b){
return sha?
}
}
function isBelowThreshold(currentValue) {
return currentValue < 40;
}
var array1 = [1, 30, 39, 29, 10, 13];
console.log(array1.every(isBelowThreshold));
// expected output: true
我知道可以写成这样
console.log(array1.every(isBelowThreshold));
//改成
console.log(array1.every(function isBelowThreshold(currentValue) {
return currentValue < 40;
});
谢谢!我又看到 数组中的reduce方法,也是传入函数,参数是 prev,curr
这些都是类似的吧
@无所不能的风:
function bubbleSort(arr){
for (let i = 0; i < arr.length - 1; i++) {
for (let j = 0; j < arr.length - i - 1; j++) {
// 顺序:如果前一个数大于后一个数,则交换
if(arr[j] > arr[j + 1]){
const temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
}
}
const array = [1, 10, 5, 2, 6, 9, 8]
bubbleSort(array)
console.log(array)
// Output: [1, 2, 5, 6, 8, 9, 10]
上面是顺序,如果需要倒序,则要将大于改成小于,其它不变。根据IoC控制反转思想,这种变化应该交给调用者。现在就变成了如何抽象这个if条件,它的输入是两个变量(分别是数组的前后两个元素),输出是一个bool,这正好可以用一个bool compare(n1, n2)函数来表示,所以可以改造成如下:
// 顺序比较
function orderedCompare(n1, n2){
return n1 > n2
}
// 倒序比较
function reversedCompare(n1, n2){
return n1 < n2
}
function bubbleSort(arr, compare){
for (let i = 0; i < arr.length - 1; i++) {
for (let j = 0; j < arr.length - i - 1; j++) {
if(compare(arr[j], arr[j + 1])){
const temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
}
}
const array = [1, 10, 5, 2, 6, 9, 8]
bubbleSort(array, reversedCompare)
console.log(array)
// Output: [10, 9, 8, 6, 5, 2, 1]
上面的compare函数也可以用ES6箭头函数来代替简化。
大概就是这样了。
@jello chen: 首先我应该谢谢你,占用了你的私人时间。对于你讲解的东西,我稍微了解了大概,我差的实在是太多了。谢谢你,新年快乐!
@无所不能的风: 新年快乐!
其实这里就是一个回调函数,有的回调函数会返回一个类型的数据,我们可以用变量来接受,var xx = function(){
}这里传入的xx其实可以转化成function(){},就相当于一个匿名函数
我也不知道我说的是不是我这意思,
那就这样吧 再爱都曲终人散啦
那就分手吧 再爱都无需挣扎
不要再问我 怎舍得拱手让他
其实我最关心的问题是: