一、实现min
两数找最小minOf2实现。
let minOf2 = ([a,b]) => a<b ?a : b
minOf2.call(null,[1,2])
JS内置Math.min,Math是一个普通对象。
Math.min.call(null,1,2)
任意长度数组求最小值,都可以通过 minOf2 实现。
递归实现:函数不停调用自己,每次调用的参数略有不同,当满足某个简单条件时,则实现一个简单的调用,最终得到结果。可用代入法理解。
let min = (numbers) => {
if(numbers.length > 2){
return min (
[numbers[0], min(numbers.slice(1))]
)
}else {
return Math.min.apply(null, numbers)
}
}
// numbers是数组 不能用call调用
min([34,5,22]) // 5
二、实现sort
递归思路,排序,实现sort2和sort3。
let sort3 = (numbers) => {
let index = minIndex(numbers)
let min = numbers[index]
numbers.splice(index, 1)
return [min].concat(sort2(numbers))
}
let minIndex = (numbers) => numbers.indexOf(min(numbers))
let min = (numbers) => {
if(numbers.length > 2){
return min (
[numbers[0], min(numbers.slice(1))]
)
}else {
return Math.min.apply(null,numbers)
}
}
let sort2 = ([a,b]) => a<b ? [a,b] : [b,a]
sort3([2,5,1])
// [1, 2, 5]
实现任意sort。
let sort = (numbers) => {
if(numbers.length > 2){
let index = minIndex(numbers)
let min = numbers[index]
numbers.splice(index, 1)
return [min].concat(sort(numbers))
}else {
return numbers[0]<numbers[1] ? numbers:numbers.reverse()
}
}
实现与调试,sort。
let sort = (numbers) => {
if(numbers.length > 2){
let index = minIndex(numbers)
let min = numbers[index]
// console.log(`min: ${min}`)
numbers.splice(index, 1)
return [min].concat(sort(numbers))
}else {
return numbers[0]<numbers[1] ? numbers:numbers.reverse()
}
}
let minIndex = (numbers) => numbers.indexOf(min(numbers))
let min = (numbers) => {
if(numbers.length > 2){
return min (
[numbers[0], min(numbers.slice(1))]
)
}else {
return Math.min.apply(null,numbers)
}
}
sort([8,95,13,456,100,1111])
// [8, 13, 95, 100, 456, 1111]
三、两个数组方法
关于splice方法 。通过移除或者替换已存在的元素和/或添加新元素就地改变一个数组的内容。
splice(start, deleteCount, item1, item2, itemN)
关于slice方法。返回一个新的数组对象,包括 start,不包括 end。
slice(start, end)