zoukankan      html  css  js  c++  java
  • 3、flat函数设计

    算法题

    输入:['a', ['b', 'c'], 2, ['d', 'e', 'f'], 'g', 3, 4]

    输出:a,b,c,2,d,e,f,g,3,4

    const arr = ['a', ['b', 'c'], 2, ['d', 'e', 'f'], 'g', 3, 4]
        // 方式一:递归(代码太多已省略)
        // 方式二:toString(格式转换) 隐式类型转换   [1,2,3].toString() = 1,2,3
        // 方式三:valueOf(格式转化),和toString差不多,把toString换成valueOf
        /*const flag = (arr) => {
          let toString = Array.prototype.toString
          Array.prototype.toString = function() {   // 改变
            return this.join(',')
          }
          Array.prototype.toString = toString   // 还原
          return arr + ''  // 隐式类型转换,这里arr会先调用valueOf结果返回不是基本数据类型则继续调用toString然后结束,否则会报错
        }
        console.log(flag(arr))*/
    
        // 方式四:Iterator 对新型的数据结构进行遍历
        Array.prototype[Symbol.iterator] = function() {
          let arr = [].concat(this) // arr = ['a', ['b', 'c'], 2, ['d', 'e', 'f'], 'g', 3, 4]
          let getFirst = function(array) {
            let first = array.shift()
            return first
          }
          return {  // 遍历器必须返回对象,并且有next()方法
            next() {
              let item = getFirst(arr)
              if (item) {
                return {
                  value: item,  // 返回的值,如果item是数组则调toString
                  done: false   // 是否遍历结束
                }
              } else {
                return {
                  done: true
                }
              }
            }
          }
        }
        const flag = function (arr){
            let r = []
            for (let i of arr) { r.push(i) }
            return r.join(',')
        }
        console.log(flag(arr))
  • 相关阅读:
    Spark高级数据分析· 2数据分析
    rtsp 学习
    vs code 体验
    RTP 学习
    libev 学习使用
    TS 数据流分析学习
    linux 编程
    times、 time、clock函数说明
    gcc 学习
    2010912 双模机顶盒学习记录
  • 原文地址:https://www.cnblogs.com/zouxinping/p/10330723.html
Copyright © 2011-2022 走看看