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))
  • 相关阅读:
    事务
    XML小总结
    java中array,arrayList,iterator;
    MariaDB Galera Cluster 部署(如何快速部署 MariaDB 集群)
    RHCE7认证学习笔记17——KickStart安装系统
    CentOS中安装MySQL数据库
    centos下搭建svn服务器端/客户端
    AWS安装CDH5.3-CentOS6.4中关键操作步骤
    AWS安装CDH5.3-CentOS6.4
    [转]Servlet 工作原理解析
  • 原文地址:https://www.cnblogs.com/zouxinping/p/10330723.html
Copyright © 2011-2022 走看看