• 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))
  • 相关阅读:
    Java学习开篇
    《我的姐姐》
    世上本无事,庸人自扰之
    这48小时
    补觉
    淡定
    es java api 设置index mapping 报错 mapping source must be pairs of fieldnames and properties definition.
    java mongodb groupby分组查询
    linux 常用命令
    mongodb too many users are authenticated
  • 原文地址:https://www.cnblogs.com/zouxinping/p/10330723.html
Copyright © 2020-2023  润新知