数组扁平化的N中方案和斐波那契数列

119 阅读1分钟

数组扁平化

flat

array = array.flat(number|Infinity)

number代表的是扁平化的级数 Infinity无限 即所有数据扁平化

转换成字符串

toString()方法

arr = arr.toString().split(',').map(item => parseFloat(item))

JSON

arr = JSON.stringify(arr).replace(/([|])/g, '').split(',').map(item=>parseFloat(item))

循环验证是否是数组

while

 while (arr.some(item => Array.isArray(item))) { // some只要有一个满足条件就返回true
    arr = [].concat(...arr)
}
console.log(arr); // [8, 111, 1, 2, 3, 11, 22, 21, 22, 23, 4, 111, 222, 41, 42, 51, 52, 61, 62, 53, 43, 333, 5]

// concat会扁平化一级的
let a = [1,2,3,[4,5,6]]
a = [].concat(...a)
console.log(a); //  [1, 2, 3, 4, 5, 6]

let b = [1,2,3,[4,5,6,[7,8,9]]]
b = [].concat(...b)
console.log(b); // [1, 2, 3, 4, 5, 6, [7,8,9]]

递归

function myFlat(arr){
  let result = []
  // 循环数组中的每一项,把不是数组的存储到新数组中
  let fn = (arr) => {
    for (let i = 0; i < arr.length; i++) {
      if(Array.isArray(arr[i])){
        fn(arr[i])
        continue
      } else {
        result.push(arr[i])
      }
    }
  }
  fn(arr)
  return result
}

斐波那契数列

// 获取斐波那契中的个数
function febonacci(num){
  if(num-1 <= 1) return 1
  let arr = [1,1]
  //还需要创建多少位
  let count = num -2
  while (count > 0) {
    let a1 = arr[arr.length - 1]
    let a2 = arr[arr.length - 2]
    arr.push(a1+a2)
    count --
  }
  return arr
}