import _ from 'underScore'
// 递归和组合函数 conjoin Disjoin
// flat 的实现
// 互相关系的函数
// 两个或多个函数互相调用被称为互相递归
function even(n) {
if(n === 0) {
return true
} else {
return odd(Math.abs(n) - 1)
}
}
function odd(n) {
if(n === 0) {
return false
} else {
return even(Math.abs(n) - 1)
}
}
console.log(even(4)) // true
console.log(even(11)) // false
console.log(odd(11)) // true
console.log(odd(12)) // false
/* 无限展平-原生版 */
// 步骤:是数组,展平后自调用函数
// 终止条件:不是数组,返回数组
// function flatEs5(ary) {
// if(Array.isArray(ary)) {
// // 取出来一个,然后将剩下的拿出来做数组合并,从而消除数组
// return Utils.cat.apply(Utils.cat, ary.map(flatEs5))
// } else {
// // 做成所有子元素都是数组的形式,方便后面用数组合并统一处理。
// return [ary]
// }
// }
function flatEs5(ary) {
if(Array.isArray(ary)) {
let [head, ...rest] = ary.map(flatEs5)
return head.concat.apply(head, rest)
} else {
return [ary]
}
}
/* 无限展平-es6版 */
// function flatEs6(ary) {
// if(Array.isArray(ary)) {
// return ary.map(flatEs6).flat()
// } else {
// return [ary]
// }
// }
function flatEs6(ary) {
return Array.isArray(ary) ? ary.map(flatEs6).flat() : [ary]
}
/* 无限展平-es6-reduce版 */
function flatEs6Reduce(ary) {
return ary.reduce((pre, cur) => {
return pre.concat(Array.isArray(cur)?flatEs6Reduce(cur):cur)
}, [])
}
console.log(flatEs5([[1,2,3], [3,4]]))
// console.log(flatEs5([[1,2], [3,4, [5,6, [7,8]]]]))
// console.log(flatEs6Reduce([[1,2,3], [3,4]]))
// console.log(flatEs6Reduce([[1,2], [3,4, [5,6, [7,8]]]]))
// console.log(flatEs6([[1,2], [3,4, [5,6, [7,8]]]]))